使用RxJs处理mousemove stop

时间:2018-09-25 10:42:44

标签: events rxjs

有没有一种方法可以识别用户何时停止移动鼠标?我无法弄清楚如何告诉RxJs用户是否停了2秒。

当我这样使用它时:

fromEvent(document, 'mousemove').pipe(
    debounceTime(2000)
).subscribe(() => console.log("Stoped"));

即使我将光标移出屏幕,它也会触发。

1 个答案:

答案 0 :(得分:2)

视情况而定,但是timeouttimeoutWith可能适合您。

在没有"stop"事件超过1s的情况下,此示例将每次发出mousemove

const { of, defer, concat, fromEvent } = rxjs;
const { mapTo, timeoutWith, skipUntil } = rxjs.operators;

const move$ = fromEvent(document, 'mousemove').pipe(mapTo('move'));
const moveAndStop$ = move$.pipe(
  timeoutWith(
    1000, 
    defer(() => concat(
      of('stop'), 
      moveAndStop$.pipe(skipUntil(move$))
    ))
  )
);

moveAndStop$
  .subscribe(e => console.log(e));
<script src="https://unpkg.com/rxjs@6.3.2/bundles/rxjs.umd.min.js"></script>
<div id="app">Move your mouse over me</div>