Секундомер. Погрешность при использовании setInterval
Пытаюсь реализовать секундомер с выводом времени с точностью до 1\100 секунды. При использовании функции setInterval возникают заметные неточности во времени (примерно каждые 30 секунд секундомер отстает на 1 секунду). Если точность уменьшить до 1\10 секунды, то отставание незаметно (по логике должен отставать на секунду каждые 5 минут).
... hoursVal = minutesVal = secondsVal = msecondsVal = 0; var interval = setInterval(function(){ if (msecondsVal < 99) { mseconds.innerText = ++msecondsVal; } else { mseconds.innerText = msecondsVal = 0; if (secondsVal < 59) { seconds.innerText = ++secondsVal; } else { seconds.innerText = secondsVal = 0; if (minutesVal < 59) { minutes.innerText = ++minutesVal; } else { minutes.innerText = minutesVal = 0; } } } },10); Вот код. Есть мысль, что задержка происходит из-за использования свойства innerText. Пробовал использовать два интервала (один для расчета, другой для вывода), но зря. Как обойти данную проблему? P.S. Пробовал использовать setTimeout, погрешность осталась. |
никак по таймерам.а код вызываемый по таймеру сколько милесекунд выполняется? 11?12?15?.... пока код не выполнится до конца выполнение кода не пойдёт повторно-хоть и время срабатывания таймера подошло и прошло.
и на разных машинах в зависимости от их мощности отставание будет различным только увеличить шаг у таймера отслеживать только машинное время-но если я точно помню -то там минимальное изменение значения 1 секунда |
Спасибо, с машинным временем получилось.
Чтоб не плодить тем, задаю небольшой вопрос тут: как дополнить число нулями слева, например, у меня есть двузначные и однозначные числа, нужно чтоб к однозначным присобачивался ноль (7 » 07, 23 » 23). UPD. Конечно же имею в виду встроенную функцию. |
перевести их в строковой тип и прибавлять ноль
|
Как-то так:
Number.prototype.zeroFix=function(l){ return '00000000'.concat(this).slice(-l||-2) }; alert((9).zeroFix()) |
Цитата:
|
Встроенной увы нема.
|
Цитата:
|
Часовой пояс GMT +3, время: 02:08. |