Я написал метод таймера, который работает неправильно. Он должен отображать время, прошедшее во время формы, но оно подсчитывается на 2 или 3 секунды вместо одного раза в секунду. Что может вызвать такое поведение и как его исправить?javascript setInterval не работает вовремя
Мой код:
function startTimer() {
var minutes, seconds;
setInterval(function() {
if (!isPaused) {
minutes = parseInt(timer/60, 10);
seconds = parseInt(timer % 60, 10);
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
$('#TimeLabel').text("Form Time: " + minutes + ":" + seconds);
++timer;
}
}, 1000);
}
Приведенный выше код отображает "Форма Время: 00:01", затем "Время Форма: 00:04", а затем "Форма Время: 00: 07" ЭСТ.
'setInterval' (и' setTimeout') не гарантируется. Им нужно только подождать минимальный период времени, указанный вами, и может запускаться в любое время после этого. Это наиболее примечательно, если вкладка неактивна - браузеры обычно сильно дросселируют их в этих случаях. –
Я не знал об этом. Полагаю, мне нужно будет написать новый метод, чтобы вычесть из текущего времени и вычислить прошедшее время таким образом. Спасибо – BrianLegg
Они должны, с другой стороны, не быть несколько секунд, обычно это всего лишь миллисекунды. Я думаю, что просто быстро взглянув на код, проблема заключается в том, как вы увеличиваете число, а затем делите это, чтобы получить секунды и т. Д., И вы продолжаете смешивать небольшие ошибки в 'setTimeout', пока он не станет все больше и больше , и в конечном итоге секунды. – adeneo