Каждый раз, когда вы нажимаете кнопку сброса , создается новый интервал. Вот почему, когда вы нажимаете кнопку сброса больше, ваш консольный вывод становится беспорядочным.
setInterval функция возвращает идентификатор созданного интервала, вы можете сохранить его в глобальной переменной, например window.timerInterval .
Внутри функции таймера сначала запустите clearInterval (window.timerInterval) . Поэтому, если есть какие-либо интервалы, созданные и сохраненные в window.timerInterval , clearInterval (window.timerInterval) обязательно прекратит его запуск.
Проверьте и запустите рабочий пример ниже:
function timer() {
var t = 3;
console.log("timer started t = " + t);
clearInterval(window.timerInterval);
window.timerInterval = setInterval(function() {
if (t >= 0) {
document.getElementById("timer").innerHTML = t;
console.log(t);
t--;
} else {
document.getElementById("timer").innerHTML = "Time Up!";
}
}, 1000);
console.log("timer stopped t = " + t);
}
<html>
<head>
<script src=timer.js></script>
</head>
<body>
<input type=Reset onclick=timer()> <br>
<hi id="timer"></hi> <br>
</body>
</html>