Скрипт "таймера" отстает, если свернуть браузер или переключиться на другую вкладку
Здравствуйте
Есть довольно простой js-скрипт, аналог таймера, который каждую секунду изменяет цифру на экране: var time = 1000; var start_time = 1000; // ...другие параметры function timer() { setTimeout( function run() { second++; view(); // обновляет информацию на экране setTimeout(run, time); } }, start_time); } При открытии/обновлении страницы php получает данные о текущем времени, и дальше уже отрабатывает js. Заметил, что если скрыть браузер, или переключиться на другие вкладки, а потом (минут через 5-10+) вернуться на страницу с таймером, и обновить страницу - то время на несколько десятков секунд "прыгнет" вперед. Получается, что в этом случае js как бы подлагивает, и считает "время" медленней реального. Знакомый программист, разбирающийся в js сказал, что с этим ничего не поделать. Это так? |
Walk,
секунды надо менять, согласно прошедшему времени, а не относительно сколько раз сработает таймер. меняйте логику в строке 8. |
Walk,
строка 62, там обратный таймер, но логика таже, изменить вычитание несложно, чтоб время вперёд шло https://javascript.ru/forum/dom-wind...tml#post476408 |
Цитата:
Нашел немного другой - протестировал - вроде как работает без задержек: var second = 0; var interval = 1000; var expected = Date.now() + interval; setTimeout(step, interval); function step() { var dt = Date.now() - expected; if (dt > interval) { alert('Непредвиденная ошибка'); // ошибка которой не должно быть } else { // выполняем нужный код expected += interval; setTimeout(step, Math.max(0, interval - dt)); } } |
Walk,
вам виднее ... |
Часовой пояс GMT +3, время: 18:51. |