跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Layui如何实现在表格头部工具栏放置一个动态的倒计时

倒计时必须用 setInterval 独立实现,不可写入 Layui 表格 toolbar 模板;需用毫秒时间戳、手动管理定时器生命周期、reload 时重置、IE11 下用 textContent 替代 innerText。 倒计时必须用
setInterval
,但别直接塞进
toolbar
模板里 因为 layui 表格的
toolbar
是字符串模板或 dom 节点,在渲染后不会自动响应数据变化。你写个
{{ countdown }}
是没用的——layui 的表格不支持响应式模板更新。 实操建议: 在表格初始化前,先用
layui.laytpl
渲染一个独立的倒计时 DOM(比如
),再把它插入到表格容器的头部区域(如
.layui-table-box
上方) 用原生
setInterval
控制倒计时逻辑,每次更新时直接操作
document.getElementById('countdown-bar').innerText
避免在
table.render()
的
toolbar
选项里写 JS 逻辑或调用函数——那块只负责静态结构 时间戳得统一用毫秒,别传字符串或 Date 对象给倒计时函数 Layui 本身不处理时间格式,你传
"2025-04-10 14:30:00"
或
new Date()
进去,容易因时区、解析失败导致倒计时跳变甚至卡死。 实操建议: 后端返回目标时间时,统一给时间戳(单位:毫秒),例如
1744295400000
前端倒计时函数里只做减法:
remaining = targetTimestamp - Date.now()
,然后转成时分秒 注意:
Date.now()
返回的是毫秒,如果后端给的是秒级时间戳,记得乘以
1000
,否则倒计时会快 1000 倍 表格重载(
table.reload()
)时倒计时不会自动续上 很多人以为表格刷新后倒计时还能接着走,其实不会——
reload()
只刷新表格数据和 DOM,
setInterval
的引用早被丢弃了,而且目标时间可能已变。 实操建议: 把倒计时逻辑抽成独立函数,比如
startCountdown(targetMs)
,每次 reload 前先
clearInterval(timerId)
,reload 完再调用它 如果倒计时依赖表格某行数据(比如该行的截止时间),不要在
toolbar
里硬编码;改用
table.on('rendered')
钩子,在表格渲染完成后读取最新数据再启动 倒计时结束时,别只改文字——最好同时触发一次
table.reload()
或发个通知,否则用户可能错过状态变更 IE11 下
Date.now()
没问题,但
innerText
要 fallback 到
textContent
虽然 Layui 官方说兼容 IE10+,但 IE11 对
innerText
的实现有兼容性问题,尤其在动态插入的元素里,可能显示为空白。 实操建议: 更新倒计时文案时,统一用:
el.textContent = text
,而不是
innerText
避免在倒计时回调里频繁操作 DOM 结构(比如
innerHTML +=
),这在 IE 下性能差还容易错乱 如果项目必须支持 IE,别用 CSS 动画控制倒计时闪烁效果——IE11 对
@keyframes
支持有限,优先用 JS 控制 class 切换 倒计时看着简单,真正麻烦的是时间精度、生命周期绑定和跨浏览器更新一致性——尤其是 reload 和销毁时机,稍不注意就出现多个定时器共存或者文案冻结不动。

相关文章