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 Prototype 对象扩展
May 15 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
Mar 18 Javascript
js调试系列 初识控制台
Jun 18 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
浅析javascript函数表达式
Feb 10 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 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代码实现爬虫记录――超管用
2015/07/31 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
python PyTorch预训练示例
2018/02/11 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python 爬取疫情数据的源码
2020/02/09 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
学术会议邀请函范文
2014/01/22 职场文书
低碳生活倡议书
2014/04/14 职场文书
高中生班主任评语
2014/04/25 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
资产移交协议书
2016/03/24 职场文书