我正在使用Angular 7,并且有一个指令可以侦听元素的滚动。问题是,我希望指令仅响应手动滚动,而忽略使用element.scrollTop = x
完成的程序化滚动。
该指令包含一个滚动侦听器,如下所示:
@HostListener('scroll', ['$event'])
onScroll($event) {
}
在我的代码中的一个地方,我如上所述设置了一个程序化的scrollTop,并且侦听器捕获了一个事件。我试图在$event
上找到一个属性,该属性指示该事件是否为手动事件,但找不到该事件。我想念吗?或者,也许我可以以某种方式触发包含此类指示的原始javascript中的自定义事件(我知道在jQuery中您可以做到这一点,但我这里没有使用jQuery ...)。谢谢。
答案 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;
}