ПРЕДЫДУЩИЙ БУГ: В моем секундомере здесь, если я приостанавливаюсь и возобновляюсь быстро даже до первой секунды, он не обновляет seconds
в секундомере. Итак, чтобы исправить это, я сделал:
if (milliseconds >= 1000){
milliseconds %= 1000;
seconds++;
}
NEW BUG: Теперь он обновляет второй по порядку. Однако, если я просто запустил секундомер (без паузы), он пропускает первую секунду и прямо делает это 2 секунды. 1 секунда никогда не отображается. (Пожалуйста, попробуйте сами, если вы не можете понять, что я говорю).
Как это исправить?
Никогда не забывайте, что radix в parseInt
var stringToInt = parseInt(yourString, 10);
Вы начинаете интервал, но в какой-то момент вы освобождаете только тайм-аут. Вместо этого используйте clearInterval
clearInterval(timeUpdate);
EDIT: проблема секунд: пусть проверяет ваш код на timeElapsed == 1000
. Сначала вы устанавливаете секунды для
seconds = parseInt(timeElapsed / 1000, 10) + prev_seconds;
что приводит к seconds == 1
Затем вы добавляете еще 1
к секундам, если milliseconds >= 1000
if (milliseconds >= 1000){
milliseconds %= 1000;
seconds++;
}
То же самое происходит и с часами и часами.
EDIT2: проблема паузы/возобновления. Позвольте приостановить мнимые часы в 01: 437 и возобновить его.
timeElapsed начнет отсчет в 0. После 563 миллисекунд он должен переключиться на 2 секунды и 000 миллис. Но что происходит?
seconds = parseInt(timeElapsed / 1000, 10) + prev_seconds;
Это приведет к seconds == 1
для timeElapsed == 563
. Правильно это должно быть больше похоже на
seconds = Math.floor((parseInt(timeElapsed, 10) + prev_milliseconds) / 1000) + prev_seconds;
То же самое, очевидно, рассчитано на минуты и часы.
В результате FIDDLE
radix
как 10
?