Javascript实现网络监测的方法


Posted in Javascript onJuly 31, 2015

本文实例讲述了Javascript实现网络监测的方法。分享给大家供大家参考。具体实现方法如下:

该代码可监测网络是否连接及网速的快慢状态。

(function(){
var network = function(){
 var monitor = this;
 /**
  * @param {Funcation} speedInterval
  */
 var speedInterval = null;
 /**
  * @param {Function} networkInterval
  */
 var networkInterval = null;
 /**
  * @param {Function} reNetworkInterval
  */
 var reNetworkInterval = null;
 var time = 5000;
 /**
  * 获取网络连接状态
  */
 var getConnectState = function(){
  return navigator.onLine ? 1 : 0;
 }; 
 /**
  * 网络中断
  */
 var disconnect = function(){
  // TODO ... 
  console.log("网速中断");
  window.clearInterval(reNetworkInterval);
  reNetworkInterval = null;
  endSpeed();
  endNetwork();
  window.setTimeout(function(){
   reNetworkInterval = window.setInterval(function(){
    if (getConnectState() == 1) {
     window.clearInterval(reNetworkInterval);
     reNetworkInterval = null;
     startSpeed();
     startNetwork();
    } else {
     window.clearInterval(reNetworkInterval);
     reNetworkInterval = null;
     disconnect();
    }
   }, time);
  }, 2 * time);
 };
 /**
  * 网络速度
  */
 var speed = {
   /**
    * 网速过慢
    */
   bad : function(){
    // TODO ... 
    console.log("网速过慢");
    window.setTimeout(function(){
     if(getConnectState() == 1) {
      window.clearInterval(networkInterval);
      networkInterval = null;
      startSpeed();
     } else {
      disconnect();
     }
    }, 2 * time);
   },
   /**
    * 网速中等
    */
   medium : function(){
    // TODO ... 
    console.log("网速中等");
   },
   /**
    * 网速极佳
    */
   great : function(){
    // TODO ... 
    console.log("网速极佳");
   }
 };
 /**
  * 开启速度监测
  * @private
  */
 var startSpeed = function(){
  window.clearInterval(speedInterval);
  speedInterval = null;
  if(getConnectState() == 1) {
   speedInterval = window.setInterval(function(){
    var start = new Date().getTime();
    if (getConnectState() == 1) {
     var img = document.getElementById("networkSpeedImage");
     if (!!!img) {
      img = document.createElement("IMG");
      img.id = "networkSpeedImage";
      img.style.display = "none";
      document.body.appendChild(img);
     }
     try {
      img.src = "http://www.baidu.com/img/baidu_jgylogo3.gif?_t=" + new Date().getTime();
      img.onload = function(){
       var end = new Date().getTime();
       var delta = end - start;
       if (delta > 200) {
        speed.bad();
       } else if (delta > 100) {
        speed.medium();
       } else {
        speed.great();
       }
      };
     } catch(e){
      speed.bad();
     }
    } else {
     // TODO 网络断开
     disconnect();
    }
   }, time);
  }else {
   // TODO 网络断开
   disconnect();
  }
 };
 /**
  * 停止速度监测
  * @private
  */
 var endSpeed = function(){
  window.clearInterval(speedInterval);
  speedInterval = null;
 };
 /**
  * 开启网络连接监测
  * @private
  */
 var startNetwork = function(){
  if (getConnectState() == 1) {
   networkInterval = window.setInterval(function(){
    if (getConnectState() == 0) {
     disconnect();
    }
   }, time);
  } else{
   disconnect();
  }
 };
 /**
  * 结束网络连接监测
  * @private 
  */
 var endNetwork = function(){
  window.clearInterval(networkInterval);
  networkInterval = null;
 };
 /**
  * 网络监控开始
  */
 this.start = function(){
  startNetwork();
  startSpeed();
 };
 /**
  * 停止网络监控
  */
 this.stop = function(){
  endSpeed();
  endNetwork();
 };
};
  window.network = new network();
}).call(this);
// 调用的时候,直接调用network.start();

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 Javascript
javascript避免数字计算精度误差的方法详解
Mar 05 Javascript
js简单的弹出框有关闭按钮
May 05 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
跟我学习javascript的循环
Nov 18 Javascript
AngularJS通过$sce输出html的方法
Sep 22 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
Bootstrap4 gulp 配置详解
Jan 06 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
Sep 03 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 Javascript
jquery模拟alert的弹窗插件
Jul 31 #Javascript
JSON字符串转JSON对象
Jul 31 #Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 #Javascript
JavaScript实现快速排序的方法
Jul 31 #Javascript
javascript常用正则表达式汇总
Jul 31 #Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 #Javascript
js实时获取并显示当前时间的方法
Jul 31 #Javascript
You might like
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python的几种开发工具介绍
2007/03/07 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python @property的用法及含义全面解析
2018/02/01 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Django 返回json数据的实现示例
2020/03/05 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Python如何给函数库增加日志功能
2020/08/04 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
实体的生命周期
2013/08/31 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
自我鉴定写作要点
2014/01/17 职场文书
爱护草坪标语
2014/06/24 职场文书
作风整顿剖析材料
2014/09/30 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书