我正在尝试建立一个在游戏时间和工作时间之间切换的倒计时。它从工作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/