javascript - 防止 javascript setInterval 函数堆积

标签 javascript setinterval

我有一个在点击事件上运行的函数,它对我的​​一些动画使用 javascript 的 setIterval(我正在做游戏)所以问题是如果用户在动画仍在显示时点击(setInterval 仍在执行) setInterval 在事件堆栈中堆积,或者这就是我发现的结果,因此要么破坏我的游戏,要么运行速度加倍(动画)。我的问题是有什么方法可以防止事件堆叠吗?我不希望 setInterval 叠加在之前的 setInterval 上,依此类推。我知道我可以像这样使用 clearInterval 函数:

  var timerInterval = setInterval(drawPlayerRunning, 50);
  clearInterval(timerInterval);

但它并没有真正像我想要的那样工作,因为如果用户在函数仍在执行时多次单击怎么办,clearInterval 只会清除事件堆栈的最后一个事件,而保留所有先前的事件游戏”。知道如何防止此事件叠加,或者至少有效地移除它们吗?

最佳答案

您可以创建一个监视间隔状态的标志: 1)

var isIntervalInProgress = false;
setInterval(function()
{
  if ( isIntervalInProgress )
    return false;

  isIntervalInProgress = true;

  drawPlayerRunning();

  isIntervalInProgress = false;

}, 50);

或者只是一个超时,它会在完成后自行运行: 2)

var func = function()
{
  setTimeout(function()
  {
    drawPlayerRunning();
    func();
  }, 50)
}

随心所欲

关于javascript - 防止 javascript setInterval 函数堆积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13349576/

相关文章:

javascript - 谷歌电子表格: Insert Rows and copy down hidden content

javascript - 如何以 Angular 为模型 getter-setter 创建闭包?

javascript - Google Map GeoChart 的改变中心

javascript - 如何在node js中动态调用模块的函数?

javascript - CKEditor + Bootstrap modal + LayoutManager 插件,selection.getStartElement() 返回 null

javascript - 为什么我的间隔只清除了一半?

javascript - 无法读取 setInterval 中的属性

javascript - 存储 setInterval 的值

javascript - ReferenceError:count_1 未在 Joomla 模块中定义

javascript - 在 var 达到特定值后使用 setinterval 执行某些操作?