【发布时间】:2016-03-14 01:26:36
【问题描述】:
我做了一个记忆游戏,计时器从 10 分钟开始,每秒倒数到 0。这个函数只调用一次,并且有以下 setInterval 函数:
game.countdown = setInterval(function() {
if(game.timeLeft <= 0){
gameEnded = true;
}
if(!gameEnded){
// lower one second
game.timeLeft--;
var timespan = document.querySelector('.timeleft');
var minutes = pad(Math.floor((game.timeLeft / 60)),2 );
var newSeconds = pad(Math.floor(game.timeLeft - (minutes * 60)),2 );
function pad(num, size) {
var s = num+"";
while (s.length < size) s = "0" + s;
return s;
}
var niceTime = minutes + ":" + newSeconds;
timespan.innerHTML = niceTime;
// Then alter time bar on .innertimer
// Calculate percentage starting at 0%
var percentageDone = (Math.floor((10*60 - game.timeLeft) / (10*60) * 10000) / 100);
$(".timer").css({"background": "-webkit-linear-gradient(left, white " + percentageDone + "%, green " + percentageDone + "%)"});
}
}, 1000);
我将 setInterval 存储在对象游戏中的变量名倒计时下。当游戏结束时,我调用另一个具有 clearInterval 的函数:
clearInterval(game.countdown);
然后当它进入下一个级别时,它会再次调用 setInterval 函数并将其再次存储在 game.countdown 中。但是现在每秒需要 2 秒。下一级3秒。您可以看到有多个 setInterval 在工作,因为它不是同时完成的。
希望有人能真正帮助我调试这个问题。
【问题讨论】:
-
您确定正在呼叫
clearInterval吗?可能有助于了解发生这种情况的逻辑。 -
我在 clearInterval 和 clearInterval 被调用之前的行添加了一条警告。如果我做 alert("game.countdown:" + JSON.stringify(game.countdown, null, 4));然后在第一级它给出未定义的。它在 setInterval 之前。然后第二级给出 1,第三级给出 5。
-
是否有可能 setInterval 最初被触发两次,以便在调用 clearInterval 时只调用 clear 间隔之一?您可以通过在 setInterval 回调中抛出一些 console.log() 跟踪语句来测试它。
标签: javascript jquery setinterval clearinterval