javascript - 调用函数来响应 JavaScript 中的滚轮事件,但仅当同一事件的上一个函数调用完成时

标签 javascript addeventlistener

轮子事件,其中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/

相关文章:

javascript - 在使用html,css和javascript的简单菜单中冒泡

javascript - 如何使用 addEventListener 访问 JavaScript 对象属性?

javascript - Extjs 4 上传成功函数没有反应

javascript - 带有 jquery 的 Google 地理 map 在 IE 中失败

javascript - Aurelia Jspm 加载外部库

jQuery .val() 忽略输入的第一个字符

javascript - 在 addeventlistener- javascript 中传递参数

javascript - addEventListener ("load")在 Chrome 中无法正常工作?

javascript - 测试元素标签名称

javascript - 在 JS 中写一个 cookie 很慢吗?