首页 > 网页制作 >Layui弹出层如何实现点击按钮后弹窗水平翻转动画

Layui弹出层如何实现点击按钮后弹窗水平翻转动画

来源:互联网 2026-04-21 22:48:31

Layui layer.open() 不支持 anim: 7 水平翻转动画的解决方案 layer.open() 默认不支持翻转动画 在 Layui 中实现弹层的水平翻转动画时,开发者可能会尝试使用 layer.open() 的 anim 参数。官方文档列出了 0 到 6 几种内置动画效果,例如淡入淡

Layui layer.open() 不支持 anim: 7 水平翻转动画的解决方案

layer.open() 默认不支持翻转动画

在 Layui 中实现弹层的水平翻转动画时,开发者可能会尝试使用 layer.open()anim 参数。官方文档列出了 0 到 6 几种内置动画效果,例如淡入淡出和上下滑动。那么,anim: 7 是否代表隐藏的“翻转”动画呢?

答案是否定的。

长期稳定更新的攒劲资源: >>>点此立即查看<<<

原因在于,Layui 2.9.x 及更早版本的源码中,并未为 anim: 7 定义对应的 CSS 动画类。因此,无法通过该参数直接实现翻转效果。开发者需要绕过 anim 参数,手动添加 CSS 类并控制动画触发时机。

Layui弹出层如何实现点击按钮后弹窗水平翻转动画

实现过程中需注意以下三点:

  • 放弃使用 anim: 7,该参数无效。
  • 避免在调用 layer.open() 后立即添加动画类,此时 DOM 元素可能尚未渲染完成。
  • 翻转动画基于 3D 变换,需设置 transform-style: preserve-3d 并明确 transform-origin,以确保动画效果正常。

为弹层容器添加自定义类并配置 CSS

最可靠的方法是在 layer.open()success 回调函数中进行操作。此时弹层 DOM 结构已挂载并可见,可确保样式生效。

layer.open({
  type: 1,
  content: '#myDiv',
  success: function(layero, index) {
    layero.addClass('layui-layer-horizontal-flip');
  }
});

对应的 CSS 应写入全局样式表:

.layui-layer-horizontal-flip {
  transform-style: preserve-3d;
}
.layui-layer-horizontal-flip .layui-layer-content {
  animation: horizontalFlip 0.35s ease-out both;
}
@keyframes horizontalFlip {
  0% {
    transform: rotateY(90deg);
    opacity: 0;
  }
  100% {
    transform: rotateY(0);
    opacity: 1;
  }
}

实现细节包括:

  • 动画应用于 .layui-layer-content 内容区域,避免外层容器扭曲。
  • 动画时长建议在 0.4 秒以内,使用 ease-out 缓动函数使效果更自然。
  • 关键帧中需同时设置 opacity,确保动画连贯性。

为关闭操作添加反向翻转动画

若仅实现打开动画,关闭时直接消失会导致体验断层。理想效果是关闭时也触发反向翻转动画。

由于 layer.close() 未提供“关闭前”钩子,需手动绑定关闭按钮或遮罩层的点击事件,先触发退出动画,再执行关闭。

success: function(layero, index) {
  layero.addClass('layui-layer-horizontal-flip');

  layero.find('.layui-layer-close').on('click', function() {
    layero.find('.layui-layer-content').addClass('flip-out');
    setTimeout(() => layer.close(index), 350);
  });

  layero.siblings('.layui-layer-shade').on('click', function() {
    layero.find('.layui-layer-content').addClass('flip-out');
    setTimeout(() => layer.close(index), 350);
  });
}

CSS 中补充退出动画定义:

.flip-out {
  animation: horizontalFlipOut 0.35s ease-in both;
}
@keyframes horizontalFlipOut {
  0% {
    transform: rotateY(0);
    opacity: 1;
  }
  100% {
    transform: rotateY(-90deg);
    opacity: 0;
  }
}

注意事项:

  • 避免为整个 layero 绑定点击事件,以免干扰内部元素交互。
  • setTimeout 延迟时间需与 CSS 动画时长严格一致。
  • 若弹层配置了 btn 选项,需为这些按钮单独绑定关闭动画逻辑。

移动端 Safari 兼容性处理

在移动端,特别是 iOS 15 之前的 Safari 浏览器中,transform: rotateY() 的支持可能不完整。解决方案是添加 -webkit- 前缀以强制触发硬件加速。

@keyframes horizontalFlip {
  0% {
    -webkit-transform: rotateY(90deg);
    transform: rotateY(90deg);
    opacity: 0;
  }
  100% {
    -webkit-transform: rotateY(0);
    transform: rotateY(0);
    opacity: 1;
  }
}

兼容性相关要点:

  • 需同时保留标准 transform 属性与 -webkit-transform 前缀。
  • 如需兼容 iOS 12 或更早版本,可能需额外添加 transform-style: -webkit-preserve-3d
  • 避免使用 backface-visibility: hidden 强制开启 3D 渲染,以免引发布局问题。

实现流畅的翻转动画需综合考虑 DOM 操作时机、CSS 3D 上下文、浏览器前缀兼容性以及打开关闭动画的同步。忽略任一环节可能导致动画失效或效果不完整。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

相关攻略

更多

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。