角度检查滚动是手动触发还是通过脚本触发

时间:2019-02-27 15:41:14

标签: javascript angular

我正在使用Angular 7,并且有一个指令可以侦听元素的滚动。问题是,我希望指令仅响应手动滚动,而忽略使用element.scrollTop = x完成的程序化滚动。 该指令包含一个滚动侦听器,如下所示:

@HostListener('scroll', ['$event'])
  onScroll($event) {
  }

在我的代码中的一个地方,我如上所述设置了一个程序化的scrollTop,并且侦听器捕获了一个事件。我试图在$event上找到一个属性,该属性指示该事件是否为手动事件,但找不到该事件。我想念吗?或者,也许我可以以某种方式触发包含此类指示的原始javascript中的自定义事件(我知道在jQuery中您可以做到这一点,但我这里没有使用jQuery ...)。谢谢。

1 个答案:

答案 0 :(得分:1)

只需添加一个标记并将其设置为false,即可手动滚动。

别忘了在滚动处理程序中将标志设置回true

private handleScroll = true;

@HostListener('scroll', ['$event'])
onScroll($event) {
  if (!this.handleScroll) {
    this.handleScroll = true;
    return;
  }
}

public manualScroller() {
  this.handleScroll = false;

  this.element.scrollTop = 100;
}