class Timer {
startTimer(minutes = 0, seconds = 0) {
newMinute();//work
const timerID = setInterval(() => {
seconds = Math.round(seconds);
newMinute();//don't work
this.spanMinutes.innerText = minutes;
this.spanSeconds.innerHTML = seconds;
},1000)
function newMinute() {//Higher I write when I use arrow function
if (!seconds) {
if (!minutes)
this.endTimer(timerID);// don't work maybe due context
minutes--;//if I use arrow function minutes don't change
seconds = 60;//also don't change
}
}
}
endTimer(timerID, timerProgressBar) {
this.screenSettings.style.display = 'block';
this.screenTimer.style.display = 'none';
clearInterval(timerID);
clearInterval(timerProgressBar);
}
}
const timeLapse = new Timer();
timeLapse.btnStart.onclick = () => timeLapse.startTimer(1, 20);
newMinute
если секунды равны нулю, отнимает минуту и делает секунды равные 60 (а должно быть 59, потому что 60 секунд = 0 секунд). Поскольку секунды нигде не уменьшаются (seconds--
), то ты получаешь бесконечный цикл.newMinute
всё равно не будет работать, поскольку ты объявил её через function
и она теряет контекст.newMinute
, либо использовать стрелочную:const newMinute = (timerID) => {//Higher I write when I use arrow function
if (seconds < 1) {
if (minutes < 1) {
this.endTimer(timerID);// don't work maybe due context
return;
}
minutes--;//if I use arrow function minutes don't change
seconds = 59;//also don't change
return;
}
seconds--;
};