Получите каждую мс, сек с помощью javascript

#javascript

Вопрос:

 function format(n) { return (n < 10 ? "0"   n : n); }

var hour,min,sec,ms;
function timer() {
    if ((millisecond  = 1) == 100) {
        millisecond = 0;
        second  ;
    }
    if (second == 60) {
        second = 0;
        minute  ;
    }
    if (minute == 60) {
        minute = 0;
        hour  ;
    }
    hour = format(hour);
    min = format(minute);
    sec = format(second);
    ms = format(millisecond);
}
 

Я использую этот фрагмент кода для создания временных меток. Проверьте, как происходит вывод:

 00:00:00.01
00:00:00.02
...
00:00:10.10
00:00:10.11
00:00:10.12
...
00:02:05:01
00:02:05:02
...
 

Это работает идеально! Но я использую setTimeout, и иногда это очень неточно. Итак, моя идея состоит в том, чтобы начать работать с Date.Now (), но когда я использую его, я получаю что-то вроде этого в качестве ответа:

 00:00:00.02
00:00:00.05
00:00:00.07
...
00:00:07.17
00:00:00.21
00:00:00.23
...
 

Это работает, но я не могу уловить каждую миллисекунду и секунду, и это не соответствует моим потребностям! Итак, что же мне делать? Вот код:

 var offset = 0,
paused = true;

render();
  
function startStopwatch(evt) {
    if (paused) {
        paused = false;
        offset -= Date.now();
        render();
    }
}

function stopStopwatch(evt) {
    if (!paused) {
        paused = true;
        offset  = Date.now();
    }
}

function resetStopwatch(evt) {
    if (paused) {
        offset = 0;
        render();
    } else {
        offset = -Date.now();
    }
}

function format(value, scale, modulo, padding) {
    value = Math.floor(value / scale) % modulo;
    return value.toString().padStart(padding, 0);
}


var min, sec, ms;
function render() {
    var value = paused ? offset : Date.now()   offset;

    ms = format(value, 1, 1000, 3);
    sec = format(value, 1000, 60, 2);
    min = format(value, 60000, 60, 2);
  
    if(!paused) {
        requestAnimationFrame(render);
    }
}
 

Спасибо!

Комментарии:

1. Не уверен, зачем вам абсолютно необходим список следующих чисел, не пропуская ни одного, но в этом случае, почему бы просто не увеличить целые числа? Почему бы просто не начать с «1», затем «2», затем «3» и т. Д. Вплоть до «99999999»?

2. Я работаю с таймерами, 00:00:00.00, а не только с целыми числами

3. Ну, просто добавьте знаки препинания. Нетрудно сгенерировать «00:00:00.01», затем «00:00:00.02», затем «00:00:00.03».

4. Будет неточным, как setTimeout

5. Интервальные таймеры имеют минимум 4 мс наряду с другими ограничениями потока, поэтому вы не сможете достичь требуемой точности