轮子事件,其中doStg
将执行一些动画,该动画必须在执行其他操作之前完成:
document.addEventListener('wheel', doStg, false)
let numb = 0
function doStg() {
console.log(numb++)
}
我想要做什么:
仅当前面的 doStg
完成时,才将 doStg
添加到调用堆栈。
我可以做这样的事情:
document.addEventListener('wheel', doStg, false)
let count = 0
let eventController = 0
function doStg() {
if (eventController === 0) {
console.log(count++)
eventController++
setTimeout(function() {
eventController = 0
}, 3000)
}
}
现在该函数仅每 3 秒触发一次。难道就没有更好的办法了吗?
最佳答案
如果之前的调用没有完成,您可以设置立即退出函数的全局标志
document.addEventListener('wheel', doStg, false)
let isExecuting = false;
let numb = 0
function doStg() {
if(isExecuting) return; // exit if there is already executing something
isExecuting = true; // prevent next call
console.log(numb++)
// do something
isExecuting = false; // enable for next
}
关于javascript - 调用函数来响应 JavaScript 中的滚轮事件,但仅当同一事件的上一个函数调用完成时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54982302/