Outra coisa que reparei: o código usa parseInt
para arredondar o resultado da divisão.
Apesar de "funcionar", isso nem sempre dá o resultado esperado - veja aqui. A meu ver, o mais correto é trocar por Math.floor
, e somente na divisão. Já o operador %
retorna o resto da divisão, e se os operandos forem inteiros, o resultado também será. Então o que poderia ser feito é validar se os valores são inteiros, ou arredondar antes dos cálculos, por exemplo.
No exemplo abaixo vou omitir esta etapa e assumir que a função sempre recebe inteiros.
Outra melhoria é interromper o timer se ele chegar a zero. Não tem porque continuar rodando, já que neste caso o valor não é mais alterado. E se o valor inicial é menor ou igual a zero, nem inicie o timer. Enfim, uma sugestão:
function displayTime(duration, display) {
var minutes = Math.floor(duration / 60).toString().padStart(2, '0');
var seconds = (duration % 60).toString().padStart(2, '0');
display.textContent = minutes + ":" + seconds;
}
function startTimer(duration, display) {
if (duration <= 0) {
displayTime(0, display);
return;
}
var intervalId = setInterval(function () {
displayTime(duration, display);
if (duration > 0) {
duration--;
} else {
clearInterval(intervalId);
}
}, 1000);
}