首页 > 解决方案 > 对于浏览器来说,SetInterval() 到毫秒是否太多?

问题描述

我制作了一个 JavaScript 秒表,它通过每秒增加一个变量的值来工作(使用setInterval(stopwatchValue, 1000))。不过我有一些问题:如果用户在 3.8 秒处点击暂停,实际的暂停值将是 3 秒(当他们单击恢复时,秒表将从 3.0 秒而不是 3.8 秒继续)。

我确实有解决此问题的方法。我的想法是通过执行类似的操作每隔一秒更新秒表setInterval(stopwatchValue, 1)

我的问题是:浏览器每隔一秒处理这段代码是否太多:

function stopwatchValue("result") {
    document.getElementById("result").innerHTML = timer;
    timer++; 
}

ALSO:有人说如果可以的话,你应该避免多次访问 DOM。就我而言,如果我将上面的代码替换为:

var displayResultHere = document.getElementById("result");
function stopwatchValue("result") {
    displayResultHere = timer;
    timer++; 
}

我的秒表:hntr.atwebpages.com/stopwatch/stopwatch.html

标签: javascripterror-handlingsetinterval

解决方案


您需要的是可变延迟。

SetInterval 缺乏精确性仍然可以用来更新用户看到的内容。

不酷的是,四舍五入的效果意味着我可以坐下来快速单击开始,然后一遍又一遍地停止几个小时,而永远看不到这个东西一秒钟。

您需要做的是为点击添加时间戳,进行数学运算以找到实际持续时间(启动时花费的时间),计算应该显示的内容,并在 SetInterval 的一秒之前设置一次(每次启动点击)可变延迟滴答声再次开始。

这样做,再多的点击也不会减慢你的时钟。


推荐阅读