clearInterval没有清除setInterval

时间:2015-12-08 22:46:44

标签: javascript jquery setinterval clearinterval

我制作了一个带有计时器的记忆游戏,计时器从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正在运行,因为它没有同时完成。

希望有人能真正帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我为解决这个问题所做的工作如下。如果满足以下条件,则仅调用间隔:

if (undefined == game.countdown){

这样一来,如果有一个倒计时定义,它会再次调用它。由于我将game.timeLeft存储在函数本身中,我只能重新填充game.timeLeft。