声明为全局时,setInterval不起作用

时间:2016-11-06 15:46:37

标签: javascript setinterval clearinterval

我有3个全局声明的setInterval函数,其中2个正在工作,另外两个函数无论我做什么都不起作用。我正在使用一个单独的函数来清除间隔(函数ClearintervalTime()),它在stopGame()中调用

var clearIntervalvariable0, clearIntervalvariable1, clearGameInterval1=null;

function gameDuration() {
    counter = 90;
    clearGameInterval1 = setInterval(gameDurationCounter, 1000);

    function gameDurationCounter() {
        counter--;
        document.getElementById('timer').innerText = 'Time remaining:' + counter;
        speed();
        if (counter == 0) {
            stopGame();
            // clearInterval(clearGameInterval1);
            console.log('game was stopped');
        };
    };
};

function ClearintervalTime() {
    clearInterval(clearGameInterval1);
    clearInterval(clearIntervalvariable0);
    clearInterval(clearIntervalvariable1);

};
function stopGame() {
    bubbles.length = 0;
    noLoop();
    ClearintervalTime();
};

无论我做什么,这段代码都不起作用,唯一让它工作的是如果我在gameDuration()中本地声明clearGameInterval1然后用注释行在闭包函数gameDurationCounter()中关闭它。 我有一个停止游戏按钮,我想关闭间隔,不仅当计数器达到0但在按钮上也是如此。 如果我保留上面列出的代码,如果我注释掉clearInterval(clearGameInterval1),计数器甚至都不会启动;在ClearintervalTime()中,计数器将启动,但我无法停止/清除它......我想出来试图解决这个问题。没有其他变量或函数具有相同的名称,并且我试图将gameDurationCounter()置于外部(不在闭包中)相同的效果。有人可以告诉我发生了什么,出了什么问题吗?

1 个答案:

答案 0 :(得分:1)

在这个问题上花了超过2天后,我终于找到了错误..这就是我:(。我正在开始游戏,游戏计数器 startGame();中的gameDuration();

function startGame(bubbleSpawnInterval) {
if (!bubbleSpawnInterval) {
    alert('Please select a difficulty!');
} else {
    initializingVariavles();
    loop();
    gameDuration();
    randomTimers(bubbleSpawnInterval);
    difficultyLevel(bubbleSpawnInterval);

};

}; 在difficultyLevel(bubbleSpawnInterval)中,我正在清除所有3个间隔,但我在同一个函数中设置了另外2个(工作正常),而计数器间隔仍然被清除...我只需要放置gameDuration()函数使用的extendLevel(bubbleSpawnInterval)。

function startGame(bubbleSpawnInterval) {
    if (!bubbleSpawnInterval) {
        alert('Please select a difficulty!');
    } else {
        initializingVariavles();
        loop();
        randomTimers(bubbleSpawnInterval);
        difficultyLevel(bubbleSpawnInterval);
        gameDuration();
    };
};