¿Hay alguna manera de ejecutar el segundo evento después de que se active el primer evento?
En el siguiente ejemplo, me gustaría usar el evento de desplazamiento después de llamar al evento touchmove.
fromEvent(window, 'touchmove').pipe( tap(() => this.scroll$.next(false), debounceTime(100) ).subscribe(() => { this.scroll$.next(true); })Si su scroll$ Observable puede depender de otros observables y no tiene que ser un Subject , puede dejar que dependa directamente del fromEvent Observable .
private sroll$ = fromEvent$(window, 'touchmove').pipe( switchMapTo( merge( of(false), timer(100).pipe(mapTo(true)) ) ) ) El Observable scroll$ es activado por el fromEvent$(window, 'touchmove') . Luego cambiamos switchMapTo a una combinación de operadores merge :
false creando un Observable con solo ese valor ( of(false) ).timer que se true 100 ms después.En caso de que realmente no pueda usar touchstart y touchend la única forma es usar debounceTime pipe
const mousemove$ = fromEvent(document, 'mousemove'); mousemove$ .pipe( first(), switchMap(() => mousemove$), tap(() => this.scroll$.next(false)), debounceTime(1000) ) .subscribe(() => { this.scroll$.next(true); });