Интервал 10 мс с Firefox - PullRequest
       47

Интервал 10 мс с Firefox

1 голос
/ 26 октября 2011

Итак, я сделал простой таймер в таком формате: MM: SS.MS

Вы можете просмотреть его здесь [удалено]
Он отлично работает в Chrome, IE и т. Д., Но в Firefoxсекунды как будто вдвое длиннее ..

Я взглянул на некоторые другие секундомеры, но я не перестаю их понимать.Какой лучший способ сделать это?Прямо сейчас у меня есть интервал 10 мс, который генерирует таймер.

Функция выглядит так, я надеюсь, что это понятно:

var state = false;
var msTimer = null;

var min = document.getElementById("min");
var sec = document.getElementById("sec");
var ms = document.getElementById("ms");

var minCount = 0;
var secCount = 0;
var msCount = 0;


document.onkeydown = function timer(e) {

if (!e) { e = window.event; }

if (e.keyCode == "32") {

    if (state == false) {
        state = true;

        min.innerHTML = "00";
        sec.innerHTML = "00";
        ms.innerHTML = "00";

        msTimer = window.setInterval(function() {
            if (msCount == 99) {

                msCount = 0;
                secCount++;

                // Minutes
                if (secCount == 60) {

                    secCount = 0;
                    minCount++;

                    if (minCount <= 9)
                    { min.innerHTML = "0" + minCount; }
                    else
                    { min.innerHTML = minCount; }
                }

                // Seconds
                if (secCount <= 9)
                { sec.innerHTML = "0" + secCount; }
                else
                { sec.innerHTML = secCount; }

            } else { msCount++; }

            // Miliseconds
            if (msCount <= 9)
            { ms.innerHTML = "0" + msCount; }
            else
            { ms.innerHTML = msCount; }

            // 1 Hour
            if (minCount == 60) {

                clearInterval(msTimer);

                min.innerHTML = "N0";
                sec.innerHTML = "00";
                ms.innerHTML = "0B";

                state = false;

                minCount = 0;
                secCount = 0;
                msCount = 0;
            }
        }, 10);

    } else if (state == true) {
        state = false;

        clearInterval(msTimer);

        minCount = 0;
        secCount = 0;
        msCount = 0;
    }
}

Спасибо за любые советы:)

Редактировать:

И, между прочим, в Firefox гораздо плавнее, если я уберу все стили из таймера.Но это не может быть решением ..

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Вы не должны полагаться на интервал таймера, равный точно 10 мс. Было бы лучше, если бы вы рассматривали каждый тик таймера как запрос на обновление экранного таймера, но берите измерения из системных часов или что-то в этом роде.

Тогда, какой бы медленной или загруженной машина (и реализация JS) ни была, вы всегда увидите точный таймер 1 - только тот, который обновляется реже.


1 Конечно, это будет точно так же, как системные часы. Если Javascript имеет доступ к высокопроизводительному таймеру, такому как класс .NET Stopwatch или метод Java System.nanoTime(), его лучше использовать.

1 голос
/ 26 октября 2011

Время в Javascript не гарантируется. Интервал 10 мс будет когда-либо только приблизительно 10 мс, скорее всего он будет задерживаться чуть-чуть каждый раз. Правильный способ сделать таймер в Javascript - сохранить начальную временную метку при запуске таймера, затем каждые 10 мс или около того вычислять разницу между начальной временной меткой и текущим временем и обновлять элемент на странице с отформатированным значением.

...