【发布时间】:2021-03-04 21:54:05
【问题描述】:
我需要帮助或想法才能在 setInterval 中使用倒计时。
这是我在 js 上的倒计时(非常明显):
function startTimer(duration) {
var timer = duration, minutes, seconds;
setInterval(function () {
minutes = parseInt(timer / 60, 10);
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
document.getElementById('minuteDrag').innerText = minutes;
document.getElementById('secondDrag').innerText = seconds;
if (--timer < 0) {
timer = duration;
}
}, 1000);
}
当我在第二个 setinterval 之外调用此函数时,它可以正常工作(如预期的那样)。 但是当我尝试在下面的代码中运行这个函数时,时间倒计时的函数出现了错误,我猜这是因为倒计时计时器在另一个 setinterval 内被调用。
这里有解决方案的任何想法吗? (我无法摆脱“主要设置间隔”)。
var api = new Lolesports_API();
api.get_event_details('pt-BR', '105562529627228920')
.then(result_games => {
var game_id
result_games.event.match.games.forEach(game => game_id = game.id)
api.get_teams('pt-BR')
.then(result_teams =>{
var teams_dict = {}
result_teams.teams.forEach(team => {teams_dict[team.id] = team.code})
setInterval(function(){
api.get_window(game_id, get_lastest_date())
.then(result_window => {
var last_frame = result_window.frames[result_window.frames.length - 1];
var game_state = last_frame.gameState;
startTimer(60*5)
if (game_state == 'in_game') {
document.getElementById("gameState").style.backgroundColor = '#33cc33';
stopwatch_game.start();
} else if (game_state == 'paused') {
document.getElementById("gameState").style.backgroundColor = '#66a3ff';
stopwatch_game.pause();
} else {
document.getElementById("gameState").style.backgroundColor = '#ff8080';
stopwatch_game.pause();
}
//stopwatch_game.start();
})
}, 500)
})
})
PS:这不是完整的代码,为了不污染问题,我删除了很大一部分。
【问题讨论】:
-
要么在启动新计时器之前停止旧计时器,或者如果已经有计时器在运行,则不要启动另一个计时器。
-
一个更好的主意是对所有内容使用唯一的 setInterval 循环,并在内部切换以供您使用不同的代码
-
我无法以 0.5 毫秒停止 setinterval。如何将倒计时时间放在第二个 setinterval 内?