我正在使用 Rx 来保持动画时钟。每个动画帧都会将间隔刻度映射到该刻度的新值。
假设我想暂停动画。最自然的方法是以某种方式暂停时钟接收,然后在稍后恢复它。
取消订阅然后重新订阅并不是一个自然的选择,因为这个动画时钟是一个冷可观察的对象。我不想在动画恢复时重新启动动画。如果我寻求解决方法,我将不得不生成一个新的简历 rx,这会使所有公开的 API 变得非常复杂。
背压方法似乎前景并不乐观:
pause
不起作用,因为我想从上次停下的地方继续,而不是向前跳。换句话说,我不想在关闭时掉落蜱虫。
pausableBuffered
不起作用,因为在恢复时,它将尽快耗尽所有累积的蜱虫。
使用某种虚拟时间调度程序来完全停止时间然后恢复正常时间可能是可能的(?)
我使用的是 RxJS 5.0rc4,但我也不知道如何在 RxJS 4 上执行此操作。对于任一版本的任何建议将不胜感激。
Use switchMap
on a pauser
流以在原始来源和Observable.never
。如果您不希望计时器向前跳转,请自行管理(使用x
下文中的变量)。
function pausableInterval(ms, pauser) {
let x = 0;
const source = IntervalObservable.create(ms);
return pauser.switchMap(
paused => paused ?
Observable.never() :
source.map(() => x++)
);
}
The pauser
流应该发出布尔值。
未测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)