javascript - 如何防止多个超时同时运行?

标签 javascript

如果单击图像,它会在 3 秒后更改图像。但是,如果我在这三秒内多次单击图像,它会启动一个新的计时器。特别是如果我在一秒钟内点击图像 5 次,它在三秒钟内不会改变,但是当这三秒钟结束时它会在一秒钟内改变 5 次。

有没有办法做一个 if 语句,如果这个函数正在运行,则终止当前正在运行的函数并启动一个新函数。这样它将忽略图像的前 4 次点击并仅运行第五次点击,或者仅运行第一次点击并跳过其他四次点击。

代码如下:

 function auto_change(a,b) { // a is the current image and b calls a function that makes certain image visible, it works but need to fix the multiple clicks problem 
if (document.getElementById(a).style.visibility == 'visible'){
    setTimeout(b,3000);
    return;
}

最佳答案

var waitTimer = null;
function auto_change(a,b){
  if (document.getElementById(a).style.visibility == 'visible'){
    waitTimer && clearTimeout(waitTimer);
    waitTimer = setTimeout(b, 3000);
  }
}

存储超时实例并检查它是否已经存在。如果是这样,请清除它并重置它。如果没有,只需设置它。这将使最后点击成为唯一负责的点击。

其他变化:

1) click是特定于点击哪个a:

var waitTimer = [];
function auto_change(a,b){
  if (document.getElementById(a).style.visibility == 'visible'){
    waitTimer[a] && clearTimeout(waitTimer[a]);
    waitTimer[a] = setTimeout(b, 3000);
  }
}

2) 对第一次点击的 react :

var waitTimer = null;
function auto_change(a,b){
  if (!waitTimer && document.getElementById(a).style.visibility == 'visible'){
    waitTimer = setTimeout(b, 3000);
  }
}

3) 首次点击和特定于 a 的混合:

var waitTimer = [];
function auto_change(a,b){
  if (!waitTimer[a] && document.getElementById(a).style.visibility == 'visible'){
    waitTimer[a] = setTimeout(b, 3000);
  }
}

关于javascript - 如何防止多个超时同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084627/

相关文章:

javascript - 如何使用样式组件覆盖 ExpansionPanelSummary 深层元素?

javascript查询字符串

JavaScript : Delete dynamically created table

javascript - html 标签的分割值

Javascript函数指针 用于设置onclick函数

javascript - nock 不适用于请求(请求 promise )

javascript - 如何通过 Accordion 显示数据表

javascript - AngularJS - HTML 数据绑定(bind) UI 问题

javascript - jQuery .CSS 不透明度不起作用

javascript - 当未定义父 div 高度时,将 div 置于另一个 div 的中心