Скрипт "таймера" отстает, если свернуть браузер или переключиться на другую вкладку
Здравствуйте
Есть довольно простой 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, время: 04:16. |