JS倒计时纠偏
约 319 字大约 1 分钟
2026-03-31
问题
如何纠偏使用 setTimeout() 或者 setInterval() 实现的倒计时?
使用 setTimeout() 或者 setInterval() 创建的定时器,会因为时间精度问题,导致时间间隔有误差。 因为两者是到了时间后将事件加入到事件队列中,会等到当前执行栈为空的时候再取出事件执行,而不是立即执行。 因此会导致真实时间比计时器更快。
通常有两种解决办法:
- 定时向服务器发送请求去获取最新时间差,从而进行纠偏。
- 第二种则不依赖服务器,基于标准时间戳计算剩余时间。
核心原理:根据持续时间与当前时间计算结束时间,用 setTimeout() 递归更新剩余时间。
JS code example
console
Click the run button to execute the code ...
可以优化 remaining 的计算让其只返回整数。