我想知道什么时候 mousedown 被解雇超过500米,如果是的-做点什么。我的尝试:
mousedown
const button = document.querySelector('button') const stream = Rx.Observable.fromEvent(button, 'mousedown') const mouseUp$ = Rx.Observable.fromEvent(button, 'mouseup') stream.delay(500).takeUntil(mouseUp$).subscribe(() => console.log(1))
它起作用,但只在第一次运行时起作用然后,由于 takeUntil 接线员。如何让它每次都起作用?
takeUntil
DEMO
启动一个 TimerObservable 每500米 mouseDown$ 事件如果 mouseUp$ 500米内被解雇 unsubscribe 从 可计时 是的。
TimerObservable
mouseDown$
mouseUp$
unsubscribe
可计时
const button = document.querySelector('button') const mouseDown$ = Rx.Observable.fromEvent(button, 'mousedown') const mouseUp$ = Rx.Observable.fromEvent(button, 'mouseup') const stream$ = mouseDown$.switchMap(() => Rx.Observable.TimerObservable(500).takeUntil(mouseUp$)); stream$.subscribe(() => console.log('Only Fired after 500ms'))
RxJS=6.0.0
import { switchMap, takeUntil } from 'rxjs/operators'; import { timer, fromEvent } from 'rxjs'; const button = document.querySelector('button') const mouseDown$ = fromEvent(button, 'mousedown') const mouseUp$ = fromEvent(button, 'mouseup') const stream$ = mouseDown$.pipe( switchMap(() => timer(500).pipe(takeUntil(mouseUp$))) ); stream$.subscribe(() => console.log('Only Fired after 500ms'))