Создайте точный миллисекундный таймер с циклом Javascript - PullRequest
2 голосов
/ 22 января 2020

После некоторых исследований я понимаю, что наиболее точный способ создания таймера в Javascript - это сравнение прошедшего времени с начальной точкой с использованием date.now () -as , который предлагает этот ответ .

var startTime = Date.now();

var interval = setInterval(function() {
  var elapsedTime = Date.now() - startTime;
  var time = (elapsedTime / 1000).toFixed(3);
  console.log(time);
}, 10);

Это обеспечивает искомую точность, но я хочу, чтобы таймер сбрасывался сам после определенного значения (скажем, var total = 12000). Это значение определяется длиной списка воспроизведения видео (я создаю «живую» точку воспроизведения для видео программы) и является переменной.

Я застрял, как go об этом, так как Счетчик считает прошедшее время с определенного момента времени, он не совсем соответствует логике c того, что я ищу. Мы ценим любые предложения.

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Вы можете использовать .setTimeout() в конце вашего кода, чтобы перезапустить .setInterval(), после того, как желаемое время прошло

function runInterval (loopAfter) {
  var startTime = Date.now();

  var interval = setInterval(function() {
    var elapsedTime = Date.now() - startTime;
    var time = (elapsedTime / 1000).toFixed(3);
    console.log(time);
  }, 10);
  
  setTimeout(() => {
    clearInterval(interval);
    runInterval(loopAfter);
  }, loopAfter);
}

runInterval(5000);
0 голосов
/ 22 января 2020

Попробуйте это:

var startTime = Date.now();
let total = 0;
var interval = setInterval(function() {
  if (total === 12000) {
    total = 0;
    startTime = Date.now();
  } else {
    total++;
    var elapsedTime = Date.now() - startTime;
    var time = (elapsedTime / 1000).toFixed(3);
  }
  console.log(time);
}, 10);
...