我正在尝试在脚本中实现延迟滚动,并且一直运行到结束为止,我想阻止它发出额外的请求。
我已使用以下命令将事件监听器添加到我的代码中:
window.addEventListener("scroll", _.throttle(checkScroll, 500));
但是,当我尝试将其删除时,它似乎仍在继续监听并处理该事件。
我尝试过:
if (json.articles.length == 0) {
$(".articles").append("<br>That's all folks!");
window.removeEventListener("scroll", _.throttle(checkScroll, 500));
}
和
if (json.articles.length == 0) {
$(".articles").append("<br>That's all folks!");
window.off("scroll");
}
但似乎都不起作用。
答案 0 :(得分:3)
如果使用纯Javascript添加事件监听器,则删除事件监听器的唯一方法是保存对传递给_.throttle
的调用addEventListener
的结果的引用:
const handler = _.throttle(checkScroll, 500);
window.addEventListener("scroll", handler);
// ...
window.removeEventListener("scroll", handler);
如果您还使用jQuery添加处理程序(例如,window.off('scroll')
,然后是$(window).on(...)
),则只能执行类似$(window).off(...)
的操作。如果您使用Javascript添加处理程序,则jQuery的off
将无法使用。
答案 1 :(得分:1)
您可以使用on
在jQuery中添加事件处理程序,并使用off
将其删除。 Here's a fiddle进行说明。
$(window).on('scroll', function(ev) { //add handler
...
})
$(window).off('scroll', function(ev) { //remove handler
...
})