示例 RxJS Observable 当鼠标或单击 activity 重新启动时
Example RxJS Observable when mouse or click activity Re-starts
我能够创建 2 个 observables 来观察鼠标移动和点击事件:
var mousemove$ = Rx.Observable.fromEvent(document, 'mousemove');
var click$ = Rx.Observable.fromEvent(document, 'click');
我还可以使用 merge() 和 debounceTime() 来等待鼠标移动或点击不发生 10 秒,如下所示:
var allactivity$ = Rx.Observable.merge(
mousemove$.mapTo('Mouse!'),
click$.mapTo('Click!')
);
var lastact$ = allactivity$.debounceTime(10000);
但是,我想以某种方式构造一个可观察对象,以便用户在这 10 秒的 debounceTime() 限制后重新开始移动鼠标或单击。
有人可以帮我构建这个 Observable 吗?我想我错过了一些简单的东西。
你可以使用这样的东西:
var restart$ = Rx.Observable.of('Kick off')
.merge(lastact$)
.mergeMap(() => allactivity$.skipUntil(lastact$).first());
说明
Rx.Observable.of('Kick off')
- 一开始,...
.merge(lastact$)
- 每次 lastact$
发出,...
.mergeMap(() => ...)
- 创建一个 observable ...
allactivity$
- 将在 allactivity$
观察所有项目...
.skipUntil(lastact$)
- 自第一次lastact$
发射(在创建此 observable 之后)...
.first()
- 只取第一项(即第一个 activity 发生在 lastact$
发出之后)
编辑:
上面的 observable 不会在鼠标第一次移动时触发,要处理这个问题:
var firstMoveAndRestart$ = restart$.merge(allactivity$.first());
我能够创建 2 个 observables 来观察鼠标移动和点击事件:
var mousemove$ = Rx.Observable.fromEvent(document, 'mousemove');
var click$ = Rx.Observable.fromEvent(document, 'click');
我还可以使用 merge() 和 debounceTime() 来等待鼠标移动或点击不发生 10 秒,如下所示:
var allactivity$ = Rx.Observable.merge(
mousemove$.mapTo('Mouse!'),
click$.mapTo('Click!')
);
var lastact$ = allactivity$.debounceTime(10000);
但是,我想以某种方式构造一个可观察对象,以便用户在这 10 秒的 debounceTime() 限制后重新开始移动鼠标或单击。
有人可以帮我构建这个 Observable 吗?我想我错过了一些简单的东西。
你可以使用这样的东西:
var restart$ = Rx.Observable.of('Kick off')
.merge(lastact$)
.mergeMap(() => allactivity$.skipUntil(lastact$).first());
说明
Rx.Observable.of('Kick off')
- 一开始,....merge(lastact$)
- 每次lastact$
发出,....mergeMap(() => ...)
- 创建一个 observable ...allactivity$
- 将在allactivity$
观察所有项目....skipUntil(lastact$)
- 自第一次lastact$
发射(在创建此 observable 之后)....first()
- 只取第一项(即第一个 activity 发生在lastact$
发出之后)
编辑:
上面的 observable 不会在鼠标第一次移动时触发,要处理这个问题:
var firstMoveAndRestart$ = restart$.merge(allactivity$.first());