Member 13796691 Ответов: 2

Chrome замедляет таймер обратного отсчета javascript


У меня есть обратный отсчет времени в JS хорошо работает в IE но в chrome когда вкладка становится неактивной она замедляет таймер

Что я уже пробовал:

Я попробовал запустить событие на 900 миллисекунд и применил задержку og 100 мс но все равно не работает settimeout на 100 мс не работает

Patrice T

Покажите свой код (сокращенная версия)

Member 13796691

вот код , который я сделал settimeout для 900 миллисекунд, потому что на неактивной вкладке он работал нормально, но когда я добавляю задержку в 100 миллисекунд между ними, чтобы comepnsate, задержка не работает


var sec = 0;
var min = 0;
var hour = 0;
var i = 1;


функция секундомер(текст) {

//setTimeout(функция () {
// с++;
//}, 100);


функция myLoop() { // создайте функцию цикла, чтобы добавить задержку между 100 миллисекундами, потому что chrome замедляет таймер, когда вкладка неактивна
setTimeout(function () { // вызовите 100-миллисекундный setTimeout при вызове цикла
// ваш код здесь
i++; // инкремент счетчика
if (i < 100) { // если счетчик < 10, вызовите функцию цикла
myLoop(); // .. опять же, который вызовет другой
} // .. setTimeout()(
},100)
}
i = 1;



с++;
если (сек == 60) {
сек = 0;
мин = мин + 1;
}
еще {
Мин = Мин;
}
если (мин == 60) {
мин = 0;
час += 1;
}

if (sec <= 9) { sec = "0" + sec; }
document.clock.stwa.value = ((hour <= 9) ? "0" + hour : hour) + " : "+ ((min <= 9) ? "0" + мин : мин) + " : "+ сек;


if (text == "Start") { document.clock.theButton.value = "Pause "; }
если (текст == "пауза ") { документ.часы.кнопки.значение = "запустить"; }

если (документ.часы.кнопки.значение == "запустить") {
окна.clearTimeout(СД);

вернуть true;

}

SD = window.setTimeout("секундомер();", 900); //это должно быть 1000 миллисекунд(1 сек), так как его замедление в хроме я сделал событие, чтобы выстрелить в 900 миллисекунд
// минуты1 = сек / 60;
// var Totalminute = час * 60 + мин ;

var answer = document.getElementById("stwa").value;
//textbox3.value = ответ;
document.getElementById('textbox3').value = ответ;


}



функция resetIt() {


сек = -1;
мин = 0;
час = 0;
if (document.clock.theButton.value == "пауза ") {
документ.часы.кнопки.значение = "запустить";
}
окна.clearTimeout(СД);

документ.метода getElementById('textbox3 и').значение = "00" + ":" + "00" + ":" + "00";

}

2 Ответов

Рейтинг:
1

Patrice T

Совет: таймер хорош для запуска фрагмента кода в основном в обычные тайминги, но не точен для обратного отсчета времени.
Используйте таймер, чтобы узнать, когда вам нужно обновить дисплей.
Для обратного отсчета времени используйте RTC (Real Time Clock). Обратный отсчет-это разница между now() и крайним сроком.


Рейтинг:
1

Richard Deeming

Это преднамеренная "особенность" Chrome. Другие браузеры, по-видимому, также рассматривают возможность его принятия.
Вмешательство: дросселирование дорогостоящих фоновых таймеров · выпуск №34 · WICG/interventions · GitHub[^]
Фоновые вкладки в Chrome 57  |  Сеть  |  Разработчики Google[^]

В этом потоке StackOverflow есть несколько предложений:
javascript - как я могу заставить setInterval также работать, когда вкладка неактивна в Chrome? - переполнение стека[^]