Как писал Пойнти в комментарии setInterval
создаст таймер, который вызывает его функцию каждые 4 секунды.
И вы запускаете новый таймер каждый раз при запуске функции, поэтомув конце концов у вас много таймеров.И каждый из них увеличит ваше дыханиеCount.
Возможно, вы перепутали setInterval
с setTimeout
.Тогда каждый вызов функции подготовит только следующий:
var countingTo = function() {
countingBreaths.textContent = 1 + (parseFloat(countingBreaths.textContent));
var startCounting = setTimeout(countingTo, 4000);
…
Но вы все равно добавите новый clickList EventListener к вашей кнопке остановки при каждом вызове функции.Это означает, что ваша функция остановки будет вызываться много раз.В вашем примере он выполняется для каждого созданного интервала.
Таким образом, вы должны убрать это из вашей countingTo
функции следующим образом:
var intervalId = null
var countingTo = function() {
countingBreaths.textContent = 1 + (parseFloat(countingBreaths.textContent));
}
var startCounting = function () {
intervalId = setInterval(countingTo, 4000);
}
var stopCounting = function () {
clearInterval(intervalId);
}
startButton.addEventListener("click", startCounting);
stopButton.addEventListener("click", stopCounting);
Или с помощью setTimeout:
var timeoutId = null
var countingTo = function() {
countingBreaths.textContent = 1 + (parseFloat(countingBreaths.textContent));
timeoutId = setTimeout(countingTo, 4000);
}
var stopCounting = function () {
clearTimeout(timeoutId);
}
startButton.addEventListener("click", countingTo);
stopButton.addEventListener("click", stopCounting);
Также, если вы делаете анимацию, вы можете посмотреть requestAnimationFrame