layui表格不支持fade动画,需在done回调中手动控制容器opacity实现淡入;loading需禁用默认并自定义可动画元素;移动端要注意opacity与transform兼容性问题。
table.render() 里不能直接配 fade 动画
layui 表格本身不支持 fade、fadein 这类 css 过渡动画作为 loading 或渲染完成后的默认行为。它的 loading 参数只接受布尔值,且 loading 图标是绝对定位的伪元素,和表格内容 dom 是分离的——你没法靠改 opacity 或加 transition 让整个表格“淡入”。强行给 .layui-table 加 opacity: 0; transition: opacity .3s 会出问题:初始状态不可见,但 layui 渲染完也不会自动设回 1,得手动控制。
用 done 回调 + jQuery animate 实现表格淡入
真正可控的方式是在 done 回调里操作表格容器的透明度。前提是表格容器(比如 #demo)初始隐藏,等数据就位再渐显:
- 渲染前先设
style="opacity: 0; transition: opacity .3s"在容器上 -
done里执行$('#demo').css('opacity', 1),触发过渡 - 如果表格有分页或重载逻辑,每次
table.reload()后也要重置 opacity 再 fade,否则第二次就没效果 - 别用
fadeIn()方法——它会覆盖 inline style,和 layui 的 DOM 更新节奏冲突,容易闪一下或卡住
loading 区域自己加 fade,别动 layui 默认图标
默认的 .layui-table-loading 是硬编码插入的,没法直接加 fade。更稳妥的做法是关掉它,自己插一个可动画的 loading 容器:
- 配置
loading: false,禁用默认 loading - 在
request.beforeSend里插入带opacity: 0的 loading 元素,再立刻animate({opacity: 1}) - 在
done或error中对这个元素执行animate({opacity: 0}, () => $(el).remove()) - 注意:不要给 loading 元素设
display: none,否则animate()无法读取原始 opacity 值
移动端要注意 transform 和 opacity 同时动画的兼容性
iOS Safari 对同时 animating opacity 和 transform 有渲染 bug,可能卡顿或跳帧。如果你在 loading 或表格容器上还加了 scale、translateY 等 transform 效果:
- 要么只 animating
opacity,放弃位移类动效 - 要么把 fade 拆成两阶段:先
opacity过渡,complete后再 settransform - 可以用 UA 判断降级:
if (/iPad|iPhone|iPod/.test(navigator.userAgent)) { /* 只做 opacity */ }
Layui 的动画系统是声明式的、开关型的,没有中间态控制;想做淡入淡出,就得绕过它的 loading 机制,自己接管 DOM 显示逻辑——这点最容易被忽略。











