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判断IE版本号简单实用且向后兼容
Sep 11 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
bootstrap表格分页实例讲解
Dec 30 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
在Vue项目中引入JQuery-ui插件的讲解
Jan 27 jQuery
JS定义函数的几种常用方法小结
May 23 Javascript
微信小程序在线客服自动回复功能(基于node)
Jul 03 Javascript
通过layer实现可输入的模态框的例子
Sep 27 Javascript
javascript canvas实现雨滴效果
Jun 09 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中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
javascript基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
2008/08/05 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
python中round函数如何使用
2020/06/19 Python
Python reques接口测试框架实现代码
2020/07/28 Python
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
医学生职业规划范文
2014/01/05 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
拙作再改《我的收音机情缘》
2022/04/05 无线电
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
python开发制作好看的时钟效果
2022/05/02 Python