如何解决在这种情况下我能做什么? setinterval 倒数计时器内的 setinterval
我需要在 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:这不是完整的代码,为了不污染问题,我删除了很大一部分。
解决方法
现在您每半秒开始一个新的倒计时间隔。
为什么不从 startTimer 中的 setInterval 返回值,以便外循环可以根据需要停止它?
例如
startTimer = (duration) => {
let timer = duration,minutes,seconds;
return 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);
}
然后在你的主循环中你可以使用 clearInterval
来停止计时器......或者至少检查它是否存在:
let foo = undefined;
if (foo === undefined) {
foo = startTimer(60*5);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。