1

我有这段代码,我试图在其中捕获所有拖动事件。此代码仅适用于第一次拖动和停止不适用于连续拖动。

是因为 takeUntil 取消了外部 observable 吗?我怎样才能使代码工作。

const { Observable, fromEvent } = rxjs;
const { takeUntil, switchMap } = rxjs.operators;

const mouseups = fromEvent(document.querySelector('.container'), 
'mouseup'); 
const mousedowns = fromEvent(document.querySelector('.container'), 
'mousedown');
const mousemoves = fromEvent(document.querySelector('.container'), 
'mousemove');

const source = mousedowns.pipe(
  switchMap(e => mousemoves),
  takeUntil(mouseups)
);

source.subscribe(e => console.log(e));
4

1 回答 1

2

你需要把takeUntil里面的switchMap,像这样:

const source = mousedowns.pipe(
  switchMap(e => mousemoves.pipe(
    takeUntil(mouseups)
  ))
);

takeUntil放置在内部后,组合的 observable 将在事件发生时取消订阅observable mousemovesmouseup但仍会订阅mousedownobservable。

放置在外面,它会mousedown在发生事件时取消订阅 observable mouseup- 这就是它在第一次拖动后停止响应的原因。

于 2018-06-07T01:05:28.627 回答