layer.msg 的显示停留时间由 time 参数控制,单位毫秒,默认3000(3秒);time: 0 表示不自动关闭,推荐替代 time: -1;同时设 shade 和 time 时需用数组格式如 {shade: [0.3, '#000']} 避免样式异常。
layer.msg 的显示停留时间由 time 参数控制,单位是毫秒。不传 time 时,默认值为 3000(3 秒),但注意:**某些旧版 layui 文档误写为“默认 0”,实际运行中默认就是 3 秒**。
设置 time 参数的常见写法
直接在配置对象中传入 time 即可,无需额外逻辑:
-
layer.msg('操作成功', { time: 2000 })—— 显示 2 秒后自动关闭 -
layer.msg('请稍候', { time: 0 })—— 不会自动关闭(等同于time: -1,但语义更清晰) -
layer.msg('重要通知', { time: -1 })—— 保持常驻,直到用户手动点击或调用layer.close()
time: 0 和 time: -1 的区别
两者效果一致(都不自动关闭),但行为细节不同:
-
time: 0是官方文档明确支持的“不自动关闭”写法,推荐优先使用 -
time: -1在部分低版本 Layui 中可能触发异常计时器清理逻辑,虽多数情况可用,但兼容性略弱 - 无论哪种,都需配合
closeBtn: 0或遮罩交互来避免用户误点空白处关闭
容易被忽略的坑:遮罩层与 time 冲突
如果同时设置了 shade 和 time,某些 Layui 版本(尤其是 2.5.x 之前)会出现遮罩不生效或样式错乱。原因在于:time 非零时,Layui 会跳过部分遮罩初始化流程。
- 解决方法:显式指定
shade为数组格式,例如{ shade: [0.3, '#000'] } - 若仍失效,可改用
layer.tips()或layer.open()替代,它们对shade支持更稳定 - 另一个隐藏问题:在
$.ajax成功回调里快速连续调用多次layer.msg,可能因上一个未关闭就覆盖导致闪现——应加锁或用tipsMore: true
真正麻烦的不是设时间,而是当 time 和 shade、closeBtn、异步回调混在一起时,不同 Layui 小版本的行为差异会突然暴露出来。建议上线前在目标环境实测两轮:一次快速连点,一次鼠标悬停+遮罩点击。











