@Glglgl

Как сделать cекундомер без setInterval и setTimeout?

Пишу приложение на React native, нужен таймер который бы работал без setInterval и setTimeout, т.к. на странице много всего и при каждом тике setInterval или setTimeout, при задержке в 1000мс работают чуть дольше, в итоге на обычно секундомере проходит 36, а на моем через setInterval проходит 30. И вот уже нет идей как это реализовать.
  • Вопрос задан
  • 561 просмотр
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Я за RAF! : )

let rafSeconds = 0;
const rafStart = Date.now();
const tick = () => {
  const seconds = (Date.now() - rafStart) / 1000 | 0;
  if (rafSeconds !== seconds) { // секунды изменились!
    rafSeconds = seconds;
    // TODO: отрисовать новые секунды
  }
  window.requestAnimationFrame(tick);
}

tick();
Ответ написан
Stalker_RED
@Stalker_RED
const startTime = new Date();
setInterval(function() {
  const now = new Date();
  const diff = now - startTime;
  // тут немного математики и смело отрисовывай таймер привязанный к часам OS.
  console.log(diff)
}, 300);
Ответ написан
@rPman
Можно через настройку обновления страницы <meta http-equiv="refresh" content="1">в каком нибудь фрейме, где на onload вызывается дочерний метод, но это садамаза.
НЕ НАДО ТАК ДЕЛАТЬ
----------------------

setInterval и setTimer самый правильные методы, только интервал в них нужно ставить не константное значение, а вычислять исходя из разницы ожидаемого времени и текущего (если оно больше нужного, секунд прибавлять не 1 а на сколько оно дальше убежало)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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