@IIIEHbKA

Как вылечить javascript таймер?

Всем привет! В общем, есть вот такой обратный таймер:

//Код таймера:
let timerInput = document.getElementById("time"); // Берем строку
let buttonRun = document.getElementById("button"); // Берем кнопку запуска
let timerShow = document.getElementById("timer"); // Берем для показа времени
let bgr = document.getElementById('button');// Берем кнопку для изменения цвета
let audio = document.getElementById('sound'); // Берем аудио для таймера
let out = document.getElementById('out');

buttonRun.addEventListener('click', function() {
timeMinut = parseInt(timerInput.value) //* 60
})

timer = setInterval(function () {
seconds = timeMinut%60 // Получаем секунды
minutes = timeMinut/60%60 // Получаем минуты
hour = timeMinut/60/60%60 // Получаем часы
//Если время закончилось, то...
if (timeMinut <= 0) {
// Таймер удаляется
clearInterval(timer);
//Цвет фона кнопки по окончанию таймера
bgr.style.background = 'red'
bgr.style.color = '#fff'
} else if (timeMinut == 300){
sound.play(sound)
}else {// Иначе
//Цвет фона кнопки
bgr.style.background = '#5AF407'
// Создаем строку с выводом времени
let strTimer = `${Math.trunc(hour)}:${Math.trunc(minutes)}:${seconds}`;
// Выводим строку в блок для показа таймера
timerShow.innerHTML = strTimer;
}
--timeMinut;// уменьшаем таймер
}, 1000);
// Суть вопроса:
Он не работает, когда экран телефона заблокирован. Но после включения экрана продолжается с того времени на котором был заблокирован экран. Как-то это можно вылечить? Всем спасибо.
  • Вопрос задан
  • 206 просмотров
Решения вопроса 2
wapster92
@wapster92 Куратор тега JavaScript
Комментировать
SagePtr
@SagePtr
Еда - это святое
Иметь ввиду, что функции setTimeout и setInterval не гарантируют, что функция будет выполнена через заданное число милисекунд, они лишь гарантируют, что функция будет выполнена не раньше, а там - как повезёт. Потому для таймера лучше всего запоминать в отдельной переменной время начала (или время окончания, если у нас обратный отсчёт до нуля), и вычитать его из текущего времени (или наоборот) при отображении. А для обновления отображаемого значения как раз и использовать setInterval, но иметь ввиду, что промежутки могут быть неровными.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы