clearInterval 不清除 setInterval

clearInterval is not clearing setInterval

我做了一个记忆游戏,有一个定时器,从 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 在工作,因为它不是同时完成的。

希望有人能真正帮我调试这个问题。

我为解决此问题所做的工作如下。只有满足以下条件时才会调用间隔:

if (undefined == game.countdown){

这样,如果定义了倒计时,则会再次调用它。而且由于我将 game.timeLeft 存储在函数本身中,所以我可以重新填充 game.timeLeft.