代码之家  ›  专栏  ›  技术社区  ›  Runtime Terror

用RXJS控制鼠标移动停止

  •  0
  • Runtime Terror  · 技术社区  · 6 年前

    有没有一种方法可以确定用户何时停止移动鼠标?我不知道如何在RXJS中判断用户是否停下来,比如说2s。

    当我这样使用它时:

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Oles Savluk    6 年前

    视情况而定,但 timeout timeoutWith 可能会为你工作。

    此示例将发出 "stop" 每次没有的时候 mousemove 超过1秒的事件:

    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>