Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从事件侦听器触发两个函数(一个被限制,另一个未被限制)_Javascript_Addeventlistener_Throttling - Fatal编程技术网

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()
  })
}