用 setInterval 定时更新 td 的 innerHTML
直接操作目标 `处理时间归零后自动停掉 clearInterval
倒计时结束后不清理定时器,会导致内存泄漏和逻辑混乱(如按钮状态不同步、回调重复触发)。JavaScript不会自动清理,必须手动处理。
典型场景:页面切到后台再切回,倒计时跳变或控制台报 `Cannot set property 'innerHTML' of null`。这通常是因为DOM已被移除,但定时器仍在执行。
因此,需注意两个关键点:
* 每次进入 `setInterval` 回调,首先检查目标 `格式化输出:用 padStart 避免手动拼字符串
手动拼接 `h + ":" + (m < 10 ? "0" : "") + m` 虽简单,但秒级倒计时中分钟/小时可能为0,容易遗漏补零,且可读性差。
`padStart` 是现代浏览器的标准方法(IE已淘汰,无需兼容),一行代码即可完成补零,语义明确。
* 推荐封装为小函数:`const fmt = n => String(n).padStart(2, "0");`
* 计算时优先转为整数:`const secs = Math.max(0, Math.floor(remaining / 1000));`,避免浮点误差影响取整。
* 若需支持天数,拆解顺序应为:`days = Math.floor(secs / 86400)` → `hours = Math.floor((secs % 86400) / 3600)`,避免连除运算。
多个倒计时共存时用闭包隔离状态
当页面上有多个 `来源:https://www.php.cn/faq/2820089.html
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。
相关推荐
补充同频道和同主题内容,方便继续浏览更多相关内容。
同类最新
继续查看同栏目最近更新的文章。
uni-app小程序Canvas绘制超大图片报错问题的解决方案
iOSCanvas高度超4096px会静默失败,需分段绘制,每段控制在3800px内;导出需在draw回调内执行;H5跨域污染需设置crossOrigin或fetch中转;canvasId错误因组件未挂载,需确保DOM就绪。
HTML表格鼠标悬停整行加粗实现技巧
表格行悬停加粗需避免内联样式或!important,建议用font-weight:700;统一作用于td和th;加粗后文字发虚可用text-rendering优化;注意tr:hover在display:grid下失效,移动端需加cursor:pointer。
HTML项目集成Prettier与ESLint双重质量保障配置
Prettier默认不格式化Vue单文件组件及WXML等文件,需要手动绑定文档选择器;ESLint工具检查内联JavaScript代码必须借助eslint-plugin-html插件;另外,eslint-config-prettier与eslint-plugin-prettier需成对安装且顺序正确;并且,在VSCode编辑器内,还需开启prettier e
用background-clip防止HTML表格背景颜色溢出边框
表格单元格默认背景色按边框盒渲染,覆盖半透明边框。解决需将背景裁剪设为内边距盒,并显式声明边框样式不为无,使边框真实存在。注意边框合并后裁剪边界变化,父容器溢出隐藏可能裁掉边框外延。
HTML表格用CAPTION标签添加说明的完整教程
HTML表格的CAPTION标签必须紧跟在开始标签后、第一个之前,否则浏览器可能忽略。可用CSS控制位置,但需注意IE和旧版Safari兼容性。该标签对屏幕阅读器识别表格用途至关重要,不可省略或用其他元素替代,也不应代替表头行。
