Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   безостановочный Timer (https://javascript.ru/forum/misc/31120-bezostanovochnyjj-timer.html)

Rayzor 27.08.2012 17:11

безостановочный Timer
 
Добрый день. Есть такое намерение - сделать таймер, который, запустившись на странице, будет продолжать отсчет и в случае перехода с этой страницы на другие (побыли 10 сек на другой - вернулись - на таймере соответственно натикало на 10 сек больше - сколько пропустили). И обновляться таймер должен только после отправки формы с введенной информацией.
Возможно ли такое сделать силами javascript?

Deff 27.08.2012 19:17

Цитата:

Сообщение от Rayzor
(побыли 10 сек на другой - вернулись - на таймере соответственно натикало на 10 сек больше - сколько пропустили). И обновляться таймер должен только после отправки формы с введенной информацией.
Возможно ли такое сделать силами javascript?

Запускаете setInterval и считываете текущее время компутера в ms в глобальную переменную
при следущем вхождении в функцию считываете текущее время , проверяете разность с глобальной переменной, если примерно равно интервалу таймера ( погрешность 10-20%) - перезаписываете глобальную переменную ждете следующего перезапуска, при превышении разницы в два и более - очевидно вернулись с какой то страницы на текущую

Зы - в Ие таймер работает и на нетекущих вкладках , так шо тут непонятка( возможно будет погрешность чуть больше... не наю)

nerv_ 27.08.2012 20:58

Deff, тыща смотриЦа круто :yes:

Deff 27.08.2012 21:04

nerv_,
спс (мну нравилось 999, хотя имхо - по сравнению с 30000 эт ерунда

Aetae 27.08.2012 21:26

Только пользователь сможет сбросить такой таймер сменой времени компьютера.)

Rayzor 27.08.2012 22:25

не хочется в серверной части проверки делать, чтоб не нагружать.
наверно придется в ajax копать, да?
хотя для начала можно и понадеяться на порядочность юзеров и то что они не успеют смахинировать )

Deff 27.08.2012 22:29

Цитата:

Сообщение от Rayzor
не хочется в серверной части проверки делать, чтоб не нагружать.

Rayzor,
Дык вроде про клиента речь ? Не вижу в данной идее обращений к серверу

Цитата:

Сообщение от Aetae
Только пользователь сможет сбросить такой таймер сменой времени компьютера.)

Если он его не дрыгает постоянно - можно брать два отсчёта и две глобальных переменных,
к примеру - второй отсчет через 100ms от первого и если в обоих отсчетах разность превышает (хотя событие редкое - чисто спор за интерес

Rayzor 27.08.2012 22:43

Да, Deff, спасибо. Попробую.

Rayzor 28.08.2012 10:24

Цитата:

Сообщение от Deff (Сообщение 200929)
Запускаете setInterval и считываете текущее время компутера в ms в глобальную переменную
при следущем вхождении в функцию считываете текущее время , проверяете разность с глобальной переменной, если примерно равно интервалу таймера ( погрешность 10-20%) - перезаписываете глобальную переменную ждете следующего перезапуска, при превышении разницы в два и более - очевидно вернулись с какой то страницы на текущую

вот блин, не получается. не могли бы набросать примерный код?

Deff 28.08.2012 11:06

<div id="Alert" style="display:none;">Вернулись с иной страницы</div>

<script type="text/javascript">
var TekTimer = new Date().getTime();
var interval = 600;
var Interval_ID;
clearInterval(Interval_ID);
Interval_ID = setInterval( function() {
      var b = new Date().getTime();
      //alert((b-TekTimer)< 1.2*interval)
      if((b-TekTimer)>( 1.2*interval)) document.getElementById('Alert').style.display='block';
      //else document.getElementById('Alert').style.display='none';
      TekTimer=new Date().getTime();
},interval)
</script>

Rayzor 28.08.2012 13:00

Deff, спасибо огромное. Но немного не то, смысл какой - если обычный таймер тикает - то при перезагрузке страницы(ф5) или назад в браузере а затем вперед и т.д. - таймер обновляется и снова с исходной точки отсчитывает.
у меня какая идея - беру текущее время, начальный интервал:
var TekTimer = new Date().getTime();
var interval = 100; секунд
высчитываю время к которому должен закончиться отсчет:
var end = TekTimer + interval; (правильно?)
а вот при повторном открытии страницы (фактически она же закрывается и по новому открывается? при переходе назад, обновлении?) проверяю текущее время , сравниваю с end и получаю некое значение от которого продолжается отсчет. и только когда происходит document.getElementById("myForm").submit(); отправка формы (происходит перенаправление на ту же страницу с другими параметрами) таймер снова со 100 секунд, отсчитывает

как в шахматах, например, онлайн играть блиц - отсчет времени идет даже когда тебя нет на странице


Часовой пояс GMT +3, время: 12:25.