Layui弹出层怎么实现加载完成前显示Loading遮罩效果

冬瑶大大_3706

冬瑶大大_3706

2026-04-09

622人浏览

原创

必须在 layui.open 的 success 回调中动态插入 loading,因 DOM 此时已挂载;禁用 layer.load() 叠加,避免遮罩错位、关闭不同步及移动端兼容问题;异步加载需手动发请求并确保 .always() 清理 loading;移动端需设 pointer-events: none 并保证父容器 position: relative。

layui.open 里怎么加 loading 遮罩

直接在 layui.open 的 content 里塞 loading 不行,因为弹出层还没渲染完,dom 还没挂载,document.getelementbyid 找不到目标节点。得靠 success 回调——它在弹窗 dom 插入页面后、动画开始前触发,是唯一能安全操作内容区域的时机。

常见错误是把 loading 放在 content 字符串里硬写死,结果弹出层一闪而过,loading 根本没显示;或者用 setTimeout 延迟操作,但时间不好控,快网下可能还没加载就隐藏了。

  • 用 success 回调获取弹窗 body 节点:$(this).find('.layui-layer-content') 或原生 this.querySelector('.layui-layer-content')
  • 在回调里动态插入 loading HTML,比如 <div class="layui-layer-loading"></div>(Layui 自带样式)
  • 加载完成后再用 layer.closeLoading() 或手动移除 loading 元素

为什么不能用 layer.load() 叠在 open 上面

layer.load() 是独立浮层,z-index 默认比 layer.open() 低,而且它不绑定到目标弹窗上。两个浮层叠加时,常出现遮罩错位、关闭不同步、点击穿透等问题——尤其当 open 弹窗带 shadeClose: true,点遮罩会关掉 load 却关不掉 open,留下空白弹窗。

更麻烦的是兼容性:Layui 2.8+ 对 layer.load() 的 z-index 做了调整,老项目升级后容易突然失效;移动端 Safari 下还可能出现遮罩层不响应 touch 事件。

  • 不要并行调 layer.load() 和 layer.open()
  • 如果必须复用 loading 效果,优先改用 layer.msg('加载中...', {icon: 16, time: 0}) 并手动控制关闭,但注意它不遮罩
  • 真正需要遮罩时,只在 open 内部做 DOM 层级控制

异步加载 content 后怎么替换 loading

当 content 是 URL(比如 content: ['xxx.html', 'get']),Layui 会自动发起请求,但不会等返回再显示弹窗——它先渲染空弹窗,再填内容。这时候 success 回调拿到的是空容器,loading 必须放进去,等 AJAX 完成再删。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

关键点在于:Layui 没暴露内部请求状态,不能监听“加载完成”,只能自己接管请求。否则会出现 loading 消失太早(内容还没渲染)或卡死(忘了清除)。

  • 把 content 改成函数形式:content: function() { return '<div class="loading">...</div>'; }
  • 在 success 回调里手动发 AJAX,用 $.get() 或 fetch,成功后用 $(layero).find('.layui-layer-content').html(data) 替换
  • 务必在 AJAX .always() 或 finally 里清理 loading,避免异常时残留

移动端点击遮罩不关闭弹窗?检查 z-index 和 pointer-events

有些机型(特别是 iOS 微信内置浏览器)下,loading 遮罩盖住整个弹窗内容区后,点外面的半透明 shade 区域没反应。这不是 Layui bug,而是因为 loading 元素用了 position: absolute 且未设 pointer-events: none,挡住了底层 shade 的点击穿透。

另一个坑是自定义 loading 用了 height: 100% 但父容器没设 position: relative,导致遮罩高度塌陷,实际没盖住全屏。

  • 给 loading 元素加 style="pointer-events: none;",确保 shade 可点击
  • 确认 loading 父容器(即 .layui-layer-content)有 position: relative
  • 避免用 vh 单位设 loading 高度,iOS Safari 对弹窗内 vh 计算不准,改用 100% 或 JS 动态赋值

事情说清了就结束

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

3080

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2893

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

80

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

40

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

20

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

40

25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13.1万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.3万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习