我正在尝试建立一个在游戏时间和工作时间之间切换的倒计时。它从工作10秒开始,然后在达到0秒时我们清除间隔并将其设置为“播放”并再次调用该函数...

var model = {
intervalID: 0,
status: 'work',
workSeconds: 10,
playSeconds: 10,
}

function startCountdown(){
if (model.status === 'work') {

    model.countdown = model.workSeconds;
    model.intervalID = setInterval(function(){

        model.countdown--;
        if (model.countdown > 0) {
            console.log('work', model.countdown);
        } else {
            model.status = 'play';
            clearInterval(model.indervalId);
            startCountdown();
        }
    }, 1000);
} else if (model.status === 'play') {

    model.countdown = model.playSeconds;
    model.intervalID = setInterval(function(){
        model.countdown--;
        if (model.countdown > 0) {
            console.log('play', model.countdown);
        } else {
            model.status = 'work';
            clearInterval(model.indervalId);
            startCountdown();
        }
    }, 1000);
}
}
startCountdown();


此功能应该在控制台上记录10秒钟的倒计时工作,然后在倒数达到0时切换到播放的10秒钟倒计时,并继续这样做。

目前看来似乎没有清除任何间隔,并且两个间隔只是在反馈循环中保持彼此设置。

为什么不清除间隔?

最佳答案

我想你有错字。 clearInterval(model.indervalId);应该是clearInterval(model.intervalID);

我也将使用setTimeout,但是我想你已经知道了。

关于javascript - clearInterval()在带有递归函数的if/else语句中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46112159/

10-12 01:36