借助可观察对象进行平滑的鼠标移动跟踪

时间:2019-08-11 07:47:56

标签: angular rxjs

我正在使用此代码来使用拖放选择,选择正方形的动画不如您使用Windows或OSX的拖放选择所获得的平滑,我不确定为什么会这样,但是我认为可能与fromEvent()有关。是否可以通过覆盖默认的fromEvent()或使用计时器(例如setTimeout())来每隔x毫秒检查和更新鼠标位置,而不是使用Event的默认值,来使其更平滑?

更新:我认为这是因为用mousemove检查鼠标位置太慢了,因为如果我快速移动鼠标并且它不在组件中,那么鼠标的最后一个位置就不会在组件的边缘,因此我需要以某种方式提高mousemove检查的速度。

我正在使用可观察的位置跟踪鼠标位置:

this.mouseMoveSubscription = fromEvent(this.elementRef.nativeElement, 'mousemove')
        .subscribe((e: MouseEvent) => {
            this.dragSelectEnd.left = e.clientX - this.elementRef.nativeElement.offsetLeft;
            this.dragSelectEnd.top = e.clientY - this.elementRef.nativeElement.offsetTop;
            this.updateHighlightSelector();
        });

并使用以下命令将其呈现在页面上:

<div class="highlight-selection"
  *ngIf="highlightSelectorActive"
  [style.left.px]="highlightSelector.left"
  [style.top.px]="highlightSelector.top"
  [style.height.px]="highlightSelector.height"
  [style.width.px]="highlightSelector.width"></div>

1 个答案:

答案 0 :(得分:0)

不确定这是否是您要寻找的东西。

去抖时间

使用debouncetimedebounce运算符可以解决您的平滑问题,直到需要的时间它才调用函数或执行pr: # @pr mov edi, offset .L.str mov esi, 1 mov edx, 10 xor eax, eax jmp printf # TAILCALL pr1: # @pr1 mov edi, offset .L.str mov esi, 1 mov edx, 10 xor eax, eax jmp printf # TAILCALL .L.str: .asciz "%d %d"

callback

Demo