javascript - 对于浏览器来说,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
解决方案
您需要的是可变延迟。
SetInterval 缺乏精确性仍然可以用来更新用户看到的内容。
不酷的是,四舍五入的效果意味着我可以坐下来快速单击开始,然后一遍又一遍地停止几个小时,而永远看不到这个东西一秒钟。
您需要做的是为点击添加时间戳,进行数学运算以找到实际持续时间(启动时花费的时间),计算应该显示的内容,并在 SetInterval 的一秒之前设置一次(每次启动点击)可变延迟滴答声再次开始。
这样做,再多的点击也不会减慢你的时钟。
推荐阅读
- powershell - Powershell 缺少语句块
- arrays - 我可以在 O(n) 中正确插入按字母顺序排序的列表吗?
- python - AWS beanstalk - 更新环境变量时 Python 应用程序失败
- java - 使用符号撇号(')查询在java中获取参数值
- sql-server - 我缺少哪些显式权限会阻止表级别的有效 INSERT 权限?
- javascript - 这是什么意思:公共子
(params: { new(...args: any[]): T }): Observable - jquery - 当我根据用户的操作创建新脚本时,如何用逗号包装我的输入?
- watchkit - watchOS上CloudKit的WKRefreshBackgroundTask?
- xamarin - 活动没有通过 super.onresume 异常调用
- javascript - 通过带有索引的jquery ajax发送php数组并接收数组值