JavaScript倒计时应基于目标时间动态计算差值,用setInterval每秒更新并格式化输出;页面失焦时监听visibilitychange事件重算,确保秒级精准。
JavaScript 实现倒计时功能,核心是用 setInterval 定期更新剩余时间,并配合日期计算逻辑。要精确到秒,关键在于避免依赖多次 setTimeout 累积误差,而是以目标时间为准、每次重算差值。
不依赖定时器累计,每次执行都用当前时间与结束时间做减法,确保秒级准确。
new Date('2025-12-31T23:59:59'))setInterval 中实时计算: remaining = endTime - new Date()
设置间隔为 1000ms,比用递归 setTimeout 更稳定,也更易控制启停。
let timer = setInterval(..., 1000)
启动remaining 时调用 clearInterval(timer) 停止
setTimeout 嵌套,否则可能漂移用户看到的“02:05:18”需要手动补零,不能直接用 getSeconds() 等方法(那是系统时间,不是倒计时剩余)。
seconds = Math.floor(remaining / 1000) % 60
String(seconds).padStart(2, '0')
Math.floor(remaining / (1000 * 60 * 60)) % 24)浏览器在标签页不可见时会节流 setInterval,造成跳秒或卡顿。
visibilitychange 事件,在页面重新可见时主动重算一次剩余时间requestAnimationFrame + 时间戳差值方式,但对秒级倒计时略显复杂,一般用 visibility 检测已足够