Javascript實現(xiàn)網(wǎng)絡(luò)監(jiān)測的方法
更新時間:2015年07月31日 11:42:11 作者:JUNQIANGWEI
這篇文章主要介紹了Javascript實現(xiàn)網(wǎng)絡(luò)監(jiān)測的方法,可實現(xiàn)檢測網(wǎng)絡(luò)連接及網(wǎng)速的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了Javascript實現(xiàn)網(wǎng)絡(luò)監(jiān)測的方法。分享給大家供大家參考。具體實現(xiàn)方法如下:
該代碼可監(jiān)測網(wǎng)絡(luò)是否連接及網(wǎng)速的快慢狀態(tài)。
(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;
/**
* 獲取網(wǎng)絡(luò)連接狀態(tài)
*/
var getConnectState = function(){
return navigator.onLine ? 1 : 0;
};
/**
* 網(wǎng)絡(luò)中斷
*/
var disconnect = function(){
// TODO ...
console.log("網(wǎng)速中斷");
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);
};
/**
* 網(wǎng)絡(luò)速度
*/
var speed = {
/**
* 網(wǎng)速過慢
*/
bad : function(){
// TODO ...
console.log("網(wǎng)速過慢");
window.setTimeout(function(){
if(getConnectState() == 1) {
window.clearInterval(networkInterval);
networkInterval = null;
startSpeed();
} else {
disconnect();
}
}, 2 * time);
},
/**
* 網(wǎng)速中等
*/
medium : function(){
// TODO ...
console.log("網(wǎng)速中等");
},
/**
* 網(wǎng)速極佳
*/
great : function(){
// TODO ...
console.log("網(wǎng)速極佳");
}
};
/**
* 開啟速度監(jiān)測
* @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 網(wǎng)絡(luò)斷開
disconnect();
}
}, time);
}else {
// TODO 網(wǎng)絡(luò)斷開
disconnect();
}
};
/**
* 停止速度監(jiān)測
* @private
*/
var endSpeed = function(){
window.clearInterval(speedInterval);
speedInterval = null;
};
/**
* 開啟網(wǎng)絡(luò)連接監(jiān)測
* @private
*/
var startNetwork = function(){
if (getConnectState() == 1) {
networkInterval = window.setInterval(function(){
if (getConnectState() == 0) {
disconnect();
}
}, time);
} else{
disconnect();
}
};
/**
* 結(jié)束網(wǎng)絡(luò)連接監(jiān)測
* @private
*/
var endNetwork = function(){
window.clearInterval(networkInterval);
networkInterval = null;
};
/**
* 網(wǎng)絡(luò)監(jiān)控開始
*/
this.start = function(){
startNetwork();
startSpeed();
};
/**
* 停止網(wǎng)絡(luò)監(jiān)控
*/
this.stop = function(){
endSpeed();
endNetwork();
};
};
window.network = new network();
}).call(this);
// 調(diào)用的時候,直接調(diào)用network.start();
希望本文所述對大家的javascript程序設(shè)計有所幫助。
相關(guān)文章
詳解webpack import()動態(tài)加載模塊踩坑
這篇文章主要介紹了詳解webpack import()動態(tài)加載模塊踩坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
Javascript中查找不以XX字符結(jié)尾的單詞示例代碼
我在寫這篇文章之前花了2個多小時在弄正則表達式,下為大家介紹下具體的實現(xiàn)思路,感興趣的朋友可以參考下2013-10-10
event.keyCode鍵碼值表 附只能輸入特定的字符串代碼
非常不錯的應用,讓文本框里只能輸入money大家看下具體的實現(xiàn)代碼,真是只有想到,原理很簡單。2009-05-05
阿里巴巴技術(shù)文章分享 Javascript繼承機制的實現(xiàn)
這篇文章主要介紹了阿里巴巴技術(shù)文章,分享的是一篇關(guān)于Javascript實現(xiàn)繼承機制的文章,感興趣的小伙伴們可以參考一下2016-01-01
基于BootStrap Metronic開發(fā)框架經(jīng)驗小結(jié)【一】框架總覽及菜單模塊的處理
這篇文章主要介紹了基于BootStrap Metronic開發(fā)框架經(jīng)驗小結(jié)【一】框架總覽及菜單模塊的處理的相關(guān)資料,小編認為非常具有參考借鑒價值,感興趣的朋友一起學習吧2016-05-05

