js简单实现实时显示网速强度

先定一个div用于显示‘弱、中、强’三个强度的图标,这里也可以直接显示文字:

    <div class="signal"><img id="signal_ico" src="../images/strong_signal.png" width="26" height="18" title="强"></div>

在页面加载完成时也就是测速开始时定义一个轮询并保存一下当前时间,用一张不大不小的图片做测速,这里选了个百度的logo图,因为不用担心资源失效。
注意在图片后添加 rd=_" +new Date().getTime(),否则浏览器会缓存当前图片就不去加载了,影响到测速

//测速开始时就执行
   var timer =  setInterval(function () {
       st = new Date();
       var img = document.createElement("img");
       img.style.width = 0;
       img.style.height = 0;
       img.style.display = "none";
       img.src =
         "https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1971525978,455276806&fm=26&gp=0.jpg?rd=_" +
         new Date().getTime();
       img.onload = showspeed;
     }, 10000);
window.onbeforeunload = function (){
  clearInterval(timer)
}


function showspeed() {
  var arr = ["弱", "中", "强"];
  var filesize = 35.4; //measured in KB
  var et = new Date();
  var speed = Math.round(filesize * 1000) / (et - st);
  
// console.log(speed);
    speed > 0 && speed <= 100
      ? changeSignalIco("week_signal.png", "弱")
      : speed > 100 && speed <= 300
      ? changeSignalIco("general_signal.png", "中")
      : speed > 300
      ? changeSignalIco("strong_signal.png", "强")
      : changeSignalIco("strong_signal.png", "强");
}  

function changeSignalIco(img,title){
$("#signal_ico")[0].src = "../images/" + img;
 $("#signal_ico")[0].title = title;
}

大概原理就是动态去轮询加载一张隐藏的图片,当图片加载完成时执行showspeed方法进行加载时间和文件大小的计算得出网速,然后根据不同的网速对强度图标进行切换。

charging...

57 声望
3 粉丝
0 条评论
推荐阅读
TypeScript + React Hooks 封装通用图表(Echarts)组件
在 React Hooks 日常开发中可能会遇到多个Echarts数据图表需求,为了便于复用和管理,开发一个通用型公共图表组件是非常有必要的。

洛阳醉长安行1阅读 726

安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城31阅读 7.2k评论 5

封面图
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco20阅读 2.1k评论 2

在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 1.9k

封面图
【已结束】SegmentFault 思否写作挑战赛!
SegmentFault 思否写作挑战赛 是思否社区新上线的系列社区活动在 2 月 8 日 正式面向社区所有用户开启;挑战赛中包含多个可供作者选择的热门技术方向,根据挑战难度分为多个等级,快来参与挑战,向更好的自己前进!

SegmentFault思否20阅读 5.6k评论 10

封面图
过滤/筛选树节点
又是树,是我跟树杠上了吗?—— 不,是树的问题太多了!🔗 相关文章推荐:使用递归遍历并转换树形数据(以 TypeScript 为例)从列表生成树 (JavaScript/TypeScript) 过滤和筛选是一个意思,都是 filter。对于列表来...

边城18阅读 7.7k评论 3

封面图
你可能不需要JS!CSS实现一个计时器
CSS现在可不仅仅只是改一个颜色这么简单,还可以做很多交互,比如做一个功能齐全的计时器?样式上并不复杂,主要是几个交互的地方数字时钟的变化开始、暂停操作重置操作如何仅使用 CSS 来实现这样的功能呢?一起...

XboxYan21阅读 1.6k评论 1

封面图

charging...

57 声望
3 粉丝
宣传栏