【发布时间】:2017-09-17 11:43:29
【问题描述】:
我使用的流在我滚动窗口时会受到限制。
在节流时(只要滚动),它会向控制台发出值。
但是,当流空闲时(用户不滚动窗口) - 我想要一个计时器启动。但是 - 如果用户再次开始滚动 - 我不希望那个计时器发出值。
目前我正在这样做:
const observable = Rx.Observable.fromEvent(window, 'scroll');
const subscriber = observable
.throttleTime(300 )
.map(() => 'throttle')
.merge(Rx.Observable.interval(1000).map(() => 'tick') )
.subscribe(
(x) => {
console.log('Next: event!', x);
},
(err) => {
console.log('Error: %s', err);
},
() => {
console.log('Completed');
});
问题是,在滚动时 - 我同时看到 "throttle" 和 "tick"(我应该只看到“油门”)
从另一个 POV 考虑这个问题。工作总是要运行。如果我滚动 - 那个受限制的滚动 - 应该调用该作业。如果我不滚动 - 计时器应该启动并开始工作。 (如果用户再次开始滚动则停止)。
问题:
如何在不滚动的空闲时间后启动计时器?
【问题讨论】:
-
这是如何在 SO 上提出一个好的问题。 +1
-
回复your other comment:您可以使用
exhaustMap+debounceTime来检测没有滚动的技巧来解决这个问题。我在这里使用switchMap所做的工作是因为我们在事件爆发期间什么都不做,而工作发生在流空闲时。反过来,switchMap会在每次发出新的滚动事件时重新启动作业(计时器)。
标签: javascript rxjs rxjs5