javascript - Javascript 中的秒表比正常时间慢

标签 javascript timer

我想用 JavaScript 制作一个可以计算毫秒、秒和分钟的秒表。这就是我所拥有的:(您可以通过按空格来停止计时器)

var counter = document.getElementsByTagName('h1')[0];
var miliseconds = 0;
var seconds = 0;
var minutes = 0;

function Add() {
  miliseconds++;
  if (miliseconds >= 99) {
    miliseconds = 0;
    seconds++;

    if (seconds >= 59) {
      seconds = 0;
      minutes++;
    }
  }

  counter.textContent = (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" +
    (seconds ? (seconds > 9 ? seconds : "0" + seconds) : "00") + ":" +
    (miliseconds ? (miliseconds > 9 ? miliseconds : "0" + miliseconds) : "00");

  Timer();
}

function Timer() {
  t = setTimeout(Add, 10);
}

Timer();

document.addEventListener("keypress", function(e) {
if (e.keyCode === 32) {
  clearTimeout(t);
}

});
<h1 id="counter">00:00:00</h1>

问题是它似乎没有以正确的速度运行,这意味着当我将它与其他计时器进行比较时,它逐渐变得比它们慢(即计时器计数的速度随着时间的推移而减慢)。突然间,有 5 秒的差异,然后变成 7 秒的差异,依此类推。 任何帮助将不胜感激。

最佳答案

您应该创建一个startTime变量,然后计算elapsedTime,并使用它来计算要显示的其他变量。

var startTime = Date.now();
setTimeout(function(){
    var elapsedTime = Date.now() - startTime;
    // Additional code to calculate hour, minute, second, milisecond here
}, 10);

关于javascript - Javascript 中的秒表比正常时间慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930796/

相关文章:

javascript - 在 HTML5 数据属性中存储和检索 javascript 数组

javascript - 如何在 POST 请求中以逗号分隔的列表中的 "escape"逗号?

swift - 在 JSONDecoder 解码一个巨大的对象时更新进度条,在 Swift 中

c# - 系统线程计时器

java - 限制游戏循环中的绘制处理

javascript - 有没有办法检查 html 属性是否不是 DOM HTML5 的一部分?

javascript - Django - 为 dygrapgs 生成 csv

javascript - 更新数组需要 MongoDB 帮助

timer - STM32 通过 RTC 从待机状态唤醒

c# - Windows 窗体从其他线程更新控件