У вас есть пара проблем ... вы, кажется, пытаетесь перебрать секунды внутри обратного вызова, который будет выполняться раз в секунду.
Даже если вы исправили этот код, у вас будет проблема с тем фактом, что setTimeout
не выполняет точно при указанном значении. Он срабатывает всякий раз, когда поток может поставить задачу в очередь> запланированное время. Таким образом, ваш таймер будет дрейфовать по продолжительности.
Я бы рекомендовал следующий подход. Используя цикл requestAnimationFrame (вы также можете использовать интервал), проверьте разницу в часах JavaScript между временем, которое вы начали, и now
, а затем выведите разницу.
var firstTime;
function startTimer(){
firstTime = Date.now();
runTimer();
}
function runTimer(){
var diff = Date.now() - firstTime;//value in milliseconds since the timer started.
var sec = Math.floor((diff/1000)) % 60;//constrain to seconds
var min = Math.floor(diff/(1000 * 60));//minutes
document.getElementById('timer').innerHTML = min + ":"+(String(sec)).padStart(2,"0");
requestAnimationFrame(runTimer);
}
startTimer();
<div id="timer">0:00</div>