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的开源工具PACKER2.0.2
Nov 04 Javascript
用Javascript实现UTF8编码转换成gb2312编码
Dec 22 Javascript
又一个图片自动缩小的JS代码
Mar 10 Javascript
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 Javascript
javascript解析json数据的3种方式
May 08 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
浅谈js中function的参数默认值
Feb 20 Javascript
JS与HTML结合实现流程进度展示条思路详解
Sep 03 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 Javascript
使用js实现单链解决前端队列问题的方法
Feb 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
getimagesize获取图片尺寸实例
2014/11/15 PHP
php操作mongoDB实例分析
2014/12/29 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
javascript globalStorage类代码
2009/06/04 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python实现五子棋游戏
2019/06/18 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
Python项目打包成二进制的方法
2020/12/30 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
高二英语教学反思
2014/01/19 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
会议欢迎标语
2014/06/30 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书