Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.03.2011, 23:11
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Секундомер. Погрешность при использовании 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, погрешность осталась.
Ответить с цитированием
  #2 (permalink)  
Старый 08.03.2011, 23:26
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

никак по таймерам.а код вызываемый по таймеру сколько милесекунд выполняется? 11?12?15?.... пока код не выполнится до конца выполнение кода не пойдёт повторно-хоть и время срабатывания таймера подошло и прошло.
и на разных машинах в зависимости от их мощности отставание будет различным
только увеличить шаг у таймера
отслеживать только машинное время-но если я точно помню -то там минимальное изменение значения 1 секунда

Последний раз редактировалось dmitriymar, 08.03.2011 в 23:29.
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2011, 00:29
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Спасибо, с машинным временем получилось.
Чтоб не плодить тем, задаю небольшой вопрос тут: как дополнить число нулями слева, например, у меня есть двузначные и однозначные числа, нужно чтоб к однозначным присобачивался ноль (7 » 07, 23 » 23).

UPD. Конечно же имею в виду встроенную функцию.

Последний раз редактировалось FINoM, 09.03.2011 в 00:32.
Ответить с цитированием
  #4 (permalink)  
Старый 09.03.2011, 00:39
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

перевести их в строковой тип и прибавлять ноль
Ответить с цитированием
  #5 (permalink)  
Старый 09.03.2011, 00:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Как-то так:
Number.prototype.zeroFix=function(l){
   return '00000000'.concat(this).slice(-l||-2)
};
alert((9).zeroFix())
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 09.03.2011, 00:55
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от dmitriymar
перевести их в строковой тип и прибавлять ноль
Я понимаю. Я спросил о встроенной функции.
Ответить с цитированием
  #7 (permalink)  
Старый 09.03.2011, 00:59
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Встроенной увы нема.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 09.03.2011, 01:00
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Aetae
Встроенной увы нема.
Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумасшедшая утечка памяти в Opera при использовании javascript в IFRAME Маэстро Opera, Safari и др. 12 18.11.2010 12:29
Проблема при использовании 2 эффектов одновременно progressive jQuery 1 02.06.2010 01:39
Выделение текста при использовании слайдера x00xer Firefox/Mozilla 8 29.09.2009 07:45
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 12:39
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 17:38