Javascript 从事件侦听器触发两个函数(一个被限制,另一个未被限制)
我有一个滚动事件的事件监听器,它触发一个函数,负责将元素附加到视口。同一个滚动事件侦听器正在被限制,以防止滚动事件倾泻(更易于管理)。用于节流的库是。问题:限制Javascript 从事件侦听器触发两个函数(一个被限制,另一个未被限制),javascript,addeventlistener,throttling,Javascript,Addeventlistener,Throttling,我有一个滚动事件的事件监听器,它触发一个函数,负责将元素附加到视口。同一个滚动事件侦听器正在被限制,以防止滚动事件倾泻(更易于管理)。用于节流的库是。问题:限制handlePageScroll会限制该方法中包含的所有内容(当然) 代码: 我尝试从handlePageScroll内部节流,但没有成功。有没有办法从事件侦听器触发两个函数? 提前感谢您。这里有一个解决方案,通过保持状态: componentDidMount() { let throttled = false window.ad
handlePageScroll
会限制该方法中包含的所有内容(当然)
代码:
我尝试从handlePageScroll
内部节流,但没有成功。有没有办法从事件侦听器触发两个函数?
提前感谢您。这里有一个解决方案,通过保持状态:
componentDidMount() {
let throttled = false
window.addEventListener('scroll', () => {
if (!throttled) {
throttle(2000, () => {
this.loadNextBatch()
throttled = false
})()
throttled = true
}
someFn()
})
}
这看起来很棒,除了在事件侦听器中使用箭头函数会导致油门断开之外。与它只是
addEventListener('scroll',throttle(2000,this.handlepage scroll))时相比,它会触发很多次。
哦,是的,你说得对,这是我这边的一个bug。我将在几分钟内用解决方案编辑我的答案。@Jose我现在已经用解决方案更新了。我还不能测试它,但希望它能为你工作!没有骰子。尝试调用throttle
除了我当前的方式之外,还有其他任何方式。我不明白为什么。它应该返回传递给它的任何函数的限制副本。从那里,您应该能够像调用任何其他函数一样调用它<代码>常数节流=节流(2000,this.loadNextBatch)代码>节流()代码>啊,那么它返回一个你调用的函数?在节流
调用的末尾添加一个简单的()
就足够了(立即调用返回的函数),请参阅我的更新答案。
componentDidMount() {
let throttled = false
window.addEventListener('scroll', () => {
if (!throttled) {
throttle(2000, () => {
this.loadNextBatch()
throttled = false
})()
throttled = true
}
someFn()
})
}