应手动添加全屏遮罩:渲染前插入固定定位、z-index为9999的loading层,done回调中隐藏;因loading: true仅显示小图标且已废弃,无法实现全屏效果。
layui table 加载前如何显示全屏 loading
直接用 table.render() 的 done 回调配合手动控制 dom 显示/隐藏最稳妥。layui 表格本身不内置全屏 loading,得自己加一层遮罩,且必须在 render() 调用前就挂上,否则会有“闪一下空白”的问题。
为什么不能只靠 loading: true
loading: true 只会在表格内部渲染一个小型加载图标,位置固定、尺寸小、不遮挡交互,完全达不到“全屏”效果。它只是个视觉提示,不是 loading 状态管理开关;而且这个参数在 2.8+ 版本中已被标记为废弃,未来可能移除。
怎么写一个真正可用的全屏 loading 遮罩
核心是两步:渲染前 show,数据回来后 hide。遮罩要覆盖整个 viewport,且 z-index 必须高于 layui-table 容器(默认是 100),建议设为 9999。
- 在
table.render()执行前,插入一段 HTML:<div id="table-loading" style="position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:9999;display:flex;align-items:center;justify-content:center;"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate"></i></div>
- 在
done回调里执行document.getElementById('table-loading').style.display = 'none' - 如果请求失败(比如
error回调触发),也要记得手动隐藏,否则 loading 会一直卡住 - 注意:不要用
layui.use(['layer'], ...)来弹 layer.load(),layer 默认居中且带边框,不是“全屏遮罩”,也不方便和 table 生命周期对齐
容易被忽略的细节
表格容器(elem 对应的 DOM)如果设置了 position: relative 或其他定位,可能导致遮罩错位;更稳妥的做法是把遮罩挂到 document.body 下,并用 top:0;left:0;right:0;bottom:0 四边撑开。另外,移动端滚动时遮罩若没加 pointer-events: none,可能拦截 touch 事件——但这里我们是要阻断操作,所以反而要确保 pointer-events: auto(默认就是)。











