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 相关文章推荐
显示js对象所有属性和方法的函数
Oct 16 Javascript
浅谈javascript 面向对象编程
Oct 28 Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
html5+canvas实现支持触屏的签名插件教程
May 08 Javascript
vue实现页面加载动画效果
Sep 19 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
基于vue-element组件实现音乐播放器功能
May 06 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
vue实现二级导航栏效果
Oct 19 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
Mar 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/10/24 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
php生成验证码函数
2015/10/20 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
iframe实用操作锦集
2014/04/22 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
js自定义回调函数
2015/12/13 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
详解Python中的条件判断语句
2015/05/14 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
大学生毕业自荐信
2013/10/10 职场文书
鲜果饮品店创业计划书
2014/01/21 职场文书
技能竞赛活动方案
2014/02/21 职场文书
消防安全承诺书
2014/05/22 职场文书
公司应聘求职信
2014/06/21 职场文书
新课程改革心得体会
2016/01/22 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
方法汇总:Python 安装第三方库常用
2022/04/26 Python