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 相关文章推荐
基于JQuery的简单实现折叠菜单代码
Sep 15 Javascript
js实现简单登录功能的实例代码
Nov 09 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
使用AngularJS创建单页应用的编程指引
Jun 19 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
Node.js学习入门
Jan 03 Javascript
快速处理vue渲染前的显示问题
Mar 05 Javascript
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 Javascript
在vue项目中 实现定义全局变量 全局函数操作
Oct 26 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
几种显示数据的方法的比较
2006/10/09 PHP
php生成WAP页面
2006/10/09 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
python 字符串split的用法分享
2013/03/23 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
python处理按钮消息的实例详解
2017/07/11 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
struct与class的区别
2014/02/03 面试题
商场拾金不昧表扬信
2014/01/13 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
经济担保书范文
2014/04/02 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏