当前位置: 首页 > news >正文

你不会还不知道如何监测用户的网络是否在线吧?

我最近遇到一个需求,要给网站添加一个用户网络离线提醒。要求我们要实时监测用户的网络状态,当用户断网了,我们要立马给用户弹出一个断网提醒。

那你可能会问,为什么要做这么一个需求呢?用户断网了,网页不就加载不出来了吗?用户不就知道了吗?

哈哈这确实也是一种情况,但是这只其中一种情况,在现实中更多的情况是,用户在访问我们的网站时发生断网,这时我们的网站数据已经被浏览器缓存,因此在网站上并看不出有什么不同。只有在加载新内容的情况下才会有所区别。那当然这样给用户的体验是十分不好的,所以我们要在用户网络断开的时候,给用户弹出一个弹框。来告诉用户网站新内容加载不出来的原因。来提高用户的体验感

如何检查是否有网络

我们可以利用navigator.onLineAPI 来检测网络状态。navigator.onLine会返回一个布尔值来显示用户是否在线。true表示在线,false表示离线,只要浏览器连接到网络的状态发生改变,属性值就会发生改变

我们可以监听网页加载事件,在网页加载时获取navigator.onLine的值

window.addEventListener('load', () => {const status = navigator.onLine;
}); 

上面的做法在网站最开始加载的时,是可以准确获取用户的网站状态的。但是有一个缺点,就是当获取完用户的网络状态后,网络又发生改变,状态值会无法及时更新!!!

怎么才能解决这个问题呢?

我们可以写一个监听断网和联网来解决这个问题

window.addEventListener('offline', (e) => {console.log('offline');
});window.addEventListener('online', (e) => {console.log('online');
}); 

那我们来做一个完整的小案例来监测我们的用户是否断网

小案例

HTML

<div class="status"><div class="offline-msg">你的网络断开了😢</div><div class="online-msg"> 你已经连上网络 🔗</div>
</div> 

CSS

html, body {padding: 0;margin: 0;
}
.status {background: #efefef;display: flex;justify-content: center;align-items: center;min-height: 100vh;
}
.offline .online-msg {display: none;
}
.offline .offline-msg {display: block;
}div {padding: 1rem 2rem;font-size: 3rem;border-radius: 1rem;color: white;font-family: Roboto, "Helvetica Neue", Arial, sans-serif;
}.online-msg {background: green;display: block;
}
.offline-msg {background: red;display: none;
} 

JavaScript

const status1 = document.querySelector(".status");
//load 监听网页加载事件
window.addEventListener("load", () => {const handleNetworkChange = () => {if (navigator.onLine) {//给status下的offline-msg和online-msg添加类名样式status1.classList.remove("offline");} else {//给status下的offline-msg和online-msg添加类名样式status1.classList.add("offline");}};
// online该事件在浏览器开始在线工作时触发window.addEventListener("online", handleNetworkChange);// offline该事件在浏览器开始离线工作时触发。window.addEventListener("offline", handleNetworkChange);
}); 

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

http://www.lryc.cn/news/1854.html

相关文章:

  • ASM Quorum FailGroup RAC on Extended Distance Clusters
  • VHDL语言基础-时序逻辑电路-触发器
  • 也许你应该学学 postman了
  • VHDL语言基础-状态机设计-ASM图法状态机设计
  • Python文件的属性获取,重命名,目录的创建,显示和改变
  • 好用的iPhone 数据恢复软件精选
  • Linux搭建redis集群6.x版本【超简单】
  • 双重检查锁是如何避免缓存雪崩的,代码例子说明
  • 【成为架构师课程系列】架构设计中的核心思维方法
  • Apollo/Nacos配置动态刷新原理及优劣
  • docker的基本管理
  • 2023年房地产投资-租金和IRR研究报告
  • 2023-2-10刷题情况
  • Python学习-----无序序列2.0(集合的创建、添加、删除以及运算)
  • 2023最详细的接口测试用例设计教程
  • 【数据库】 数据库的理论基础详解
  • Linux环境运行Maven 生成的hadoop jar包
  • ThreadPoolExecutor原理解析
  • 谷粒学苑第二章前端框架-2.2前端框架开发过程
  • 权限管理实现的两种方式(详解)
  • 【C++】智能指针思路解析和模拟实现
  • SpringCloud(18):Sentinel流控降级入门
  • C++【多态】
  • 缓存预热、缓存雪崩、缓存击穿、缓存穿透,你真的了解吗?
  • 【Java基础】018 -- 面向对象阶段项目上(拼图小游戏)
  • 【网络~】
  • 手写JavaScript中的call、bind、apply方法
  • JAVA练习46-将有序数组转换为二叉搜索树
  • linux(centos7.6)docker
  • 微信小程序滚动穿透问题