【问题标题】:Adding milliseconds to my Javascript stopwatch向我的 Javascript 秒表添加毫秒
【发布时间】:2020-02-04 15:59:37
【问题描述】:

我使用 HTML 和 Javascript 为秒表创建了一个脚本。我让它以小时分钟和秒为单位工作。我还有停止-启动计时器、停止计时器和清除计时器的功能。

谁能帮我在秒表脚本中添加毫秒?

到目前为止,这是我的代码:

var h1 = document.getElementsByTagName('h1')[0],
    start = document.getElementById('start'),
    stop = document.getElementById('stop'),
    clear = document.getElementById('clear'),
    seconds = 0, minutes = 0, hours = 0,
    t;

function add() {
    seconds++;
    if (seconds >= 60) {
        seconds = 0;
        minutes++;
        if (minutes >= 60) {
            minutes = 0;
            hours++;
        }
    }
    
    h1.textContent = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds);

    timer();
}
function timer() {
    t = setTimeout(add, 1000);
}
timer();


/* Start button */
start.onclick = timer;

/* Stop button */
stop.onclick = function() {
    clearTimeout(t);
}

/* Clear button */
clear.onclick = function() {
    h1.textContent = "00:00:00";
    seconds = 0; minutes = 0; hours = 0;
}
<h1><time>00:00:00</time></h1>
<button id="start">start</button>
<button id="stop">stop</button>
<button id="clear">clear</button>

【问题讨论】:

  • 如果您依赖于每秒准确调用的超时函数,它不会很准确。最好的办法是使用超时来更新显示并使用几个日期对象来准确跟踪经过的时间。

标签: javascript html


【解决方案1】:

在现有代码中添加毫秒是相当简单的。你只需要遵循你已经建立的基本模式。唯一真正的区别是您测量的是 1000 而不是 60。

发生了什么变化:

  • 添加了新变量milli
  • timer 的“频率”更改为 10 毫秒(1 毫秒似乎有点矫枉过正)
  • Add 函数执行时,我们将 10 毫秒添加到 milli
  • 将毫秒添加到当前显示的末尾

更新

发生了什么变化:

  • 在“停止”按钮onclick函数中将t设置为null
  • 将开始按钮的onclick 更改为函数,而不是将其指向timer。现在我们可以检查t,如果它没有值,我们运行计时器。这会阻止对开始按钮的额外点击运行更多计时器,因此我们不会收到对 add 的“额外”调用。
  • time 元素中为毫秒添加了“.000”(我在第一个版本中错过了这个)。
  • 在“清除”功能的显示值中添加了默认的“.000”(我在第一个版本中错过了这个)。
  • 在 clear 函数中添加了milli = 0;(我在第一个版本中错过了这个)。

var h1 = document.getElementsByTagName('h1')[0],
    start = document.getElementById('start'),
    stop = document.getElementById('stop'),
    clear = document.getElementById('clear'),
    milli = 0, seconds = 0, minutes = 0, hours = 0,
    t;

function add() {
    milli += 10;
    if (milli >= 1000) {
        milli = 0;
        seconds++;
        if (seconds >= 60) {
            seconds = 0;
            minutes++;
            if (minutes >= 60) {
                minutes = 0;
                hours++;
            }
        }
    }
    
    h1.textContent = (hours ? (hours > 9 ? hours : "0" + hours) : "00") + ":" + (minutes ? (minutes > 9 ? minutes : "0" + minutes) : "00") + ":" + (seconds > 9 ? seconds : "0" + seconds) + "." + (milli > 90 ? milli : "0" + milli);

    timer();
}
function timer() {
    t = setTimeout(add, 10);
}
timer();


/* Start button */
start.onclick = function() {
    if(!t) timer();
}

/* Stop button */
stop.onclick = function() {
    clearTimeout(t);
    t = null;
}

/* Clear button */
clear.onclick = function() {
    h1.textContent = "00:00:00.000";
    milli = 0; seconds = 0; minutes = 0; hours = 0;
}
<h1><time>00:00:00.000</time></h1>
<button id="start">start</button>
<button id="stop">stop</button>
<button id="clear">clear</button>

【讨论】:

  • 感谢您,感谢您对更改内容的了解。它帮助我学习。我正处于改变一切并从另一个方向开始的边缘。
  • 不客气。我鼓励你改变这一切......一直......在你学习的时候。通过按下所有按钮,我们可以了解它们的作用。有许多更好的方法可以做到这一点,但我向您展示了您的要求,因为您将根据您已经完成的工作来最好地理解答案。
  • 是的,谢谢,我了解我遇到的所有问题。我会很高兴重新开始,但现在我对我的过程很满意。我可以继续这个分支很好。另一件事,如果你不介意的话。我一直在尝试通过编辑 if 语句使添加功能仅在单击开始按钮时启动,但我无法弄清楚。
  • @JEDBOYLE 我已按照您的要求更新了代码。我还清理了我在第一个版本中遗漏的一些内容。
  • 再次感谢。这是一个求职面试的预测试,但不幸的是,我没有得到这个职位。不过,我的投资组合中的另一个补充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多