Angular 5窗口滚动事件触发了几次

时间:2018-07-27 10:58:21

标签: angular events scroll window

我注意到在Angular项目中,当我尝试监听窗口滚动事件时,在滚动动作结束时,每次滚动执行1次函数。最多我的函数被调用两次:滚动开始和滚动结束。

如果您查看的是我使用Jquery的监听器,则一次滚动操作会记录10次以上:

$(window).scroll(function() {
    console.log($(this).scrollTop());

});

https://plnkr.co/edit/z3Ajg1fg05OXKRkHMca0?p=preview

现在的问题是我试图重现我所拥有的错误,但我无法。 确实,如果您看一下用角制成的小提琴,它的工作原理类似于jquery。 https://jsfiddle.net/1hk7knwq/6592/

我拥有的代码是相同的:

constructor() {
window.onscroll = (s) => {
        console.log(window.pageYOffset);
    };
}

并且在我的项目中,每次滚动操作仅记录1到2次。您有任何想法为什么会这样吗?请帮助

我尝试了所有其他方法,例如:

window.addEventListener('scroll', this.scroll, true);

或:

@HostListener('window:scroll', ['$event']) 
    scrollHandler(event) {
      console.debug("Scroll Event");
    }

1 个答案:

答案 0 :(得分:0)

在Angular DOM Manipulation中,您不应使用Java脚本。角框架主要用于以角度方式操纵dom。

window.addEventListener('scroll', this.scroll, true);并非旨在以角度方式监听事件的方式

您可以使用window:scroll来检测滚动事件。我已经创建了用于处理滚动的自定义指令,请检查此示例https://stackblitz.com/edit/bottom-ovzmcq