layui怎么实现在断网时弹出全局网络连接已断开的横幅

雨明酱_9611

雨明酱_9611

2026-11-11

888人浏览

原创

应使用 window.navigator.onLine 和 online/offline 事件监听网络状态,配合 layer.open() 实现非阻塞顶部横幅提示,并通过心跳请求验证真实连通性,避免假在线与横幅堆叠问题。

layui怎么实现在断网时弹出全局网络连接已断开的横幅

监听网络状态变化用 window.navigator.onLine

浏览器原生提供 navigator.onLine 属性和 online/offline 事件,Layui 本身不封装网络状态逻辑,得自己监听。注意:这个 API 只能判断浏览器是否认为联网(比如禁用网卡或断开 Wi-Fi 会触发 offline),但无法检测到「已连 Wi-Fi 却无外网」或「DNS 失败」「网关超时」等真实业务级断网——它只是粗粒度的连接开关信号。

实操建议:

  • 在页面加载后立即检查 navigator.onLine 初始值,避免首次打开就离线却没提示
  • 绑定 window.addEventListener('offline', ...) 和 window.addEventListener('online', ...),不要只依赖定时轮询
  • 避免在 offline 回调里直接调用 Layui 的 layer.msg() 或 layer.alert(),它们是模态弹窗,打断用户操作且无法自动关闭;横幅需非阻塞、可自动收起

用 layer.open() 模拟横幅并控制样式与生命周期

Layui 的 layer.open() 支持自定义内容和样式,适合做顶部横幅。关键不是用 layer.msg()(它是底部小 toast),而是用 type: 1(页面层)+ area + offset 定位到顶部,并手动设 anim: -1 关闭动画、time: 3000 自动关闭。

示例代码片段:

let offlineLayer = null;
function showOfflineBanner() {
  if (offlineLayer) return; // 防重复触发
  offlineLayer = layer.open({
    type: 1,
    title: false,
    closeBtn: 0,
    offset: 't',
    area: ['100%', '42px'],
    anim: -1,
    time: 3000,
    shade: false,
    content: '<div style="background:#f60;color:#fff;text-align:center;line-height:42px;font-size:14px;">⚠️ 网络连接已断开,请检查网络</div>',
    end: () => { offlineLayer = null; }
  });
}
window.addEventListener('offline', showOfflineBanner);

注意:layer.open() 默认会加阴影和边框,必须显式设 shade: false 和 closeBtn: 0 才像横幅;offset: 't' 是顶部定位,但若页面有固定头部,可能需要 offset: '0px' 并配合 style="top: 0;" 更精准。

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

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

下载

处理「假在线」问题:发心跳请求验证真实连通性

navigator.onLine 返回 true 不代表能访问你的后端。常见场景:本地开发时 localhost 正常,但部署后 CDN 域名被屏蔽、或接口域名 DNS 解析失败,此时 onLine 仍为 true,但所有 $.ajax 都会超时。

实操建议:

  • 在应用启动后,用 $.ajax({ url: '/api/health', timeout: 3000 }) 发一个轻量心跳(后端返回 200 OK 即可),失败则手动触发横幅
  • 后续每次接口请求前,不重复发心跳;但若连续 2 次请求因 statusText === 'timeout' 或 status === 0 失败,再触发横幅并暂停自动重试
  • 心跳接口必须静态、无鉴权、不走代理(比如直接指向同域 /healthz),否则会形成死循环

避免横幅堆叠和误关闭

用户快速切网、重连多次时,容易因事件触发频率高导致多个横幅叠加,或刚显示就被另一个 online 事件清掉。

关键控制点:

  • 用单例变量 offlineLayer 记录当前横幅 ID,每次触发前先 if (offlineLayer) layer.close(offlineLayer)
  • 收到 online 事件时,不要立刻关闭横幅(用户可能还没看到),而是延迟 500ms 关闭,或只清除定时器、让横幅自然消失
  • 如果横幅被用户手动点击关闭,要同步置空 offlineLayer,否则下次断网不会重显
  • 移动端 Safari 对 offline 事件支持不稳定,建议加一个 10 秒级的兜底轮询(仅当 navigator.onLine === true 时才轮询)

网络状态横幅真正的难点不在显示,而在「什么时候该显示」和「什么时候不该显示」——尤其是混合了前端缓存、PWA、代理环境之后,navigator.onLine 的真假边界非常模糊。先跑通基础监听,再根据实际部署环境补心跳和兜底逻辑。

相关文章

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

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

下载

相关标签:

layui layui菜鸟教程

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

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2943

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

6463

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7330

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

7198

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

1023

5

ajax教程
ajax教程

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

2023.06.14

3420

4

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

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

2023.08.31

360

5

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

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

2023.11.15

3233

5

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

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

2024.09.24

1181

6

热门下载

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

精品课程

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

共87课时 | 13.2万人学习

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

共89课时 | 11.5万人学习

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

共5课时 | 1.6万人学习