当前位置: 首页 > Web前端 > HTML5

前端日常实战:116#视频演示如何使用CSS和原生JS开发一个监控网络连接状态的页面

时间:2023-04-05 15:26:37 HTML5

效果预览在当前页面点击右侧的“点击预览”按钮进行预览,以及单击链接以全屏预览。https://codepen.io/comehop??e/pen/oPjWvw互动视频本视频为互动视频,您可以随时暂停视频,编辑视频中的代码。请使用chrome、safari、edge打开观看。https://scrimba.com/p/pEgDAM/ceNm8CW源码下载日常前端实战系列完整源码请到github下载:https://github.com/comehop??e/front-end-daily-challengescodeinterpretationnavigator.onLine属性用于获取在线状态,配合相应的事件触发,可以开发在线检测工具。整个过程分为两部分,先绘制视觉效果,再检测在线/离线状态。定义dom,容器包含客户端、信号和服务器:

居中显示:body{margin:0;高度:100vh;显示:弹性;对齐项目:居中;justify-content:center;}在顶部添加一个横条用于显示当前状态是在线还是离线,并使用绿色表示在线::root{--status-color:green;}body{background:linear-gradient(var(--status-color)5vh,#ccc5vh);}定义容器尺寸:.detector{width:40em;高度:14em;font-size:10px;}定义子元素(client,signal,server)的整体布局和主色:.detector{display:flex;证明内容:空格之间;对齐项目:居中;color:#333;}设置子元素(client,signal,server)及其伪元素的公共属性:.detector>*{position:relative;box-sizing:border-box;}.??detector>*::before,.detector>*::after{content:'';位置:绝对;box-sizing:border-box;}绘制客户端的显示:.client{width:17em;高度:10em;边框:0.5em实心;边界半径:0.5em;}用伪元素绘制显示器的底部:.client{display:flex;弹性方向:列;对齐项目:居中;margin-top:-4em;}.client::before{width:1.5em;高度:3em;背景颜色:currentColor;顶部:9.5em;}.client::after{宽度:5em;高度:1em;背景颜色:currentColor;边界半径:0.3em;top:12.5em;}绘制服务器机箱:.server{width:7em;高度:14em;边框:0.5em实心;border-radius:0.5em;}使用伪元素绘制硬盘,注意这里阴影的用法,绘制第二个硬盘:.server::before{width:5em;高度:1em;背景颜色:currentColor;边界半径:0.2em;顶部:8em;左:0.5em;盒子阴影:01.5em0;}使用伪元素绘制按钮,用法和上面的阴影一样,这次用阴影绘制第二个按钮:.server::after{width:0.6em;高度:0.6em;背景颜色:currentColor;边界-半径:50%;右:1.5em;底部:0.5em;box-shadow:1em000.1em;}绘制信号,注意颜色是用来表示在线/离线颜色,目前是绿色的:.signal,.signal::before,.signal::after{width:1em;高度:1em;背景nd-color:var(--status-color);border-radius:50%;}.signal::before{right:2.5em;}.signal::after{left:2.5em;}动画信号:.signal,.signal::before,.signal::after{动画:无限闪烁0.6秒;}@keyframes闪烁{50%{过滤器:不透明度(0.1);}}为第二个信号和第三个信号设置动画延迟,延迟值由变量定义::root{--second-signal-delay:0.2s;--third-signal-delay:0.4s;}.signal::before{animation-delay:var(--second-signal-delay);}.signal::after{animation-delay:var(--third-signal-delay);}至此,视觉效果已经完成,目前已经上线。它在:root中一共定义了3个变量,最上面的横条和信号是绿色的,信号灯依次闪烁表示正在传输数据::root{--status-color:green;--second-signal-delay:0.2s;--third-signal-delay:0.4s;}通过修改这3个变量的值,可以得到离线状态的视觉效果,顶部横条和信号变成红色,信号灯一起闪烁到表示该行不可用::root{--status-color:orangered;--second-signal-delay:0s;--third-signal-delay:0s;}接下来,通过检测在线/离线状态动态应用这两个效果定义在线状态主题:constONLINE_THEME={statusColor:'green',secondSignalDelay:'0.2s',thirdSignalDelay:'0.4s'}同样,定义离线状态主题:constOFFLINE_THEME={statusColor:'orangered',secondSignalDelay:'0s',thirdSignalDelay:'0s'}创建一个根据在线/离线状态显示不同主题的函数:functiondetectOnlineStatus(){lettheme=navigator.onLine?ONLINE_THEME:OFFLINE_THEME让root=document.documentElementroot.style。setProperty('--status-color',theme.statusColor)root.style.setProperty('--second-signal-delay',theme.secondSignalDelay)root.style.setProperty('--third-signal-delay',theme.thirdSignalDelay)}detectOnlineStatus()现在关闭wifi连接,然后刷新页面,页面会采用红色主题;打开wifi连接,然后刷新页面,页面会采用绿色主题。接下来,将检测函数绑定到系统事件上。当连接断开或重新连接时,页面会自动设置主题,无需手动刷新页面:window.addEventListener('online',detectOnlineStatus)window.addEventListener('offline',detectOnlineStatus)大功告成!