我注意到在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");
}
答案 0 :(得分:0)
在Angular DOM Manipulation中,您不应使用Java脚本。角框架主要用于以角度方式操纵dom。
window.addEventListener('scroll', this.scroll, true);
并非旨在以角度方式监听事件的方式
您可以使用window:scroll来检测滚动事件。我已经创建了用于处理滚动的自定义指令,请检查此示例https://stackblitz.com/edit/bottom-ovzmcq