Секундомер. Погрешность при использовании 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, время: 12:05. |