[英]clearInterval doesn't works and increases interval speed
Im making a blackjack game which contains a timer.我正在制作一个包含计时器的二十一点游戏。 Timer should restart if player decides to draw a new card.
如果玩家决定抽一张新牌,计时器应该重新启动。 When i press draw button it does reset but increments interval speed by 1.
当我按下绘图按钮时,它会重置但间隔速度增加 1。
const createCountDown = (isPlayerDrawed = false) => {
delay = 10;
let Timer = document.getElementById('timer');
if (isPlayerDrawed == true) {
delay = 10;
clearInterval(timer);
createCountDown(false);
} else {
let timer = setInterval(() => {
if (delay <= 0) {
clearInterval(timer);
stay();
} else {
delay--;
Timer.innerHTML = delay;
}
}, 1000)
console.log(timer)
}
}
How can i fix this problem ?我该如何解决这个问题?
const createCountDown = (isPlayerDrawed = false, delay) => {
counter = delay;
let Timer = document.getElementById('timer');
let interval = null
if (isPlayerDrawed === true) {
clearInterval(interval);
} else {
interval = setInterval(() => {
Timer.innerHTML = counter;
if (counter <= 0) {
clearInterval(interval);
stay();
} else {
counter--;
}
}, 1000)
}
} }
changing function like this worked for me.像这样改变功能对我有用。
Your let timer
is only scoped to the else
block.您的
let timer
仅适用于else
块。 Other references will refer to a global variable.其他引用将引用全局变量。
Here is how you can make it work:以下是如何使其工作:
let Timer = document.getElementById('timer'); const stay = () => Timer.textContent = "timer expired!"; const createCountDown = (function () { let delay, timer; function reset() { delay = 10; clearInterval(timer); timer = 0; Timer.textContent = ""; } reset(); return function () { reset(); Timer.textContent = delay; timer = setInterval(() => { if (delay <= 0) { reset(); stay(); } else { delay--; Timer.textContent = delay; } }, 1000); } })(); // Optionally start timer immediately: createCountDown(); document.getElementById('draw').addEventListener("click", createCountDown);
<button id="draw">Draw</button> <p id="timer"></p>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.