我有一个在点击事件上运行的函数,它对我的一些动画使用 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/