要实现Layui弹窗向下滑出动画,需手动接管关闭流程:先为.layui-layer添加layer-slide-down类触发动画,再监听transitionend事件调用layer.close(index);CSS中定义transform: translateY(100vh)和opacity: 0配合transition。

要让Layui弹窗关闭时呈现向下滑出的动画效果,不能依赖layer.close()直接触发——它同步销毁DOM,动画根本来不及渲染;必须手动接管关闭流程,先加退出类触发动画,再监听过渡结束事件调用真正关闭。
关闭前注入退出动画类
在用户点击关闭按钮(或执行关闭逻辑)时,获取弹层最外层容器(.layui-layer),为其添加一个自定义退出class,例如layer-slide-down。
这一步必须作用于.layui-layer本身,而不是.layui-layer-content——因为content只是内容区,不控制整体定位和位移起点;只有父容器具备transform上下文才能实现“向下滑出”。
执行:document.querySelector('.layui-layer').classList.add('layer-slide-down');
监听transitionend后真正关闭
给刚添加了class的.layui-layer绑定一次transitionend事件,在回调中调用layer.close(index),确保DOM在动画完成后再移除。
⚠️ 注意:必须用$layer.one('transitionend', ...)或addEventListener(..., {once: true}),避免多次绑定导致重复关闭;若动画未触发(如CSS未生效),需加setTimeout兜底。
【关键前提:index变量必须在layer.open()返回时正确捕获并保持作用域可见】
示例代码:
const $layer = $('.layui-layer');
$layer.addClass('layer-slide-down');
$layer.one('transitionend', () => layer.close(index));
编写对应的CSS退出动画
在全局样式或skin自定义类中,定义.layer-slide-down的transform和opacity变化:
.layui-layer.layer-slide-down {
transform: translateY(100vh);
opacity: 0;
transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1), opacity 0.3s;
}
动画时长建议设为0.3s左右,cubic-bezier值选用稍带惯性的缓动函数,避免生硬截停;不要只写opacity,否则视觉上只是淡出,达不到“滑出”效果。
如果弹窗带遮罩(.layui-layer-shade),它默认随弹层同步消失——如需遮罩也带动画,须单独控制:.layer-slide-down ~ .layui-layer-shade { opacity: 0; transition: opacity 0.3s; }


















