天天看點

頁面加載進度條

頁面加載進度條實作原理:

将要加載的js動态的添加到head中,并根據每個是否加載完成,統計目前一共加載完成的個數。當每一項都加載完成,加載成功。

設定加載失敗時間。當超過這個時間提示加載失敗。

詳細解釋:

代碼示例:

<!DOCTYPE html>

<html>

<head>

<title>頁面加載進度條</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<style>

#test{height:20px; width: 200px;border:1px solid #666666; margin:300px auto; font-size: 12px; position: relative;text-align: center; line-height: 20px;}

#test div{height:100%;width:0px; background: #FF0000;}

#test span{display:block; height:100%; width: 100%; position: absolute; left: 0px; top: 0px; z-index: -1px;}

</style>

</head>

<body>

<div id="test">

<div></div>

<span>0%</span>

</div>

<script>

var arr =[ "http://www.huohu123.com/static/nav/js/jquery-1.4.2.min.js?v=5d204",

"http://news.2hua.com/adiframe/163/NewsL04/01/js/BX.1.0.1.B.js",

"http://c.cnzz.com/cnzz_core.php?web_id=3558971&l=none",

"http://img1.126.net/channel7/insert560120_111012.js",

"http://news.2hua.com/adiframe/163/NewsL03/01/js/BX.1.0.1.B.js",

"http://www.google-analytics.com/ga.js"];

var marr = new Array(); // 标記arr中的是否加載完畢

var maxtime = 20000; // 設定加載失敗時間20秒

var timing = 0; // 記錄目前的時間

var mtest = document.getElementById("test"); // 進度條容器

var mtestdiv = mtest.getElementsByTagName("div")[0]; // 進度條線

var mtestspan = mtest.getElementsByTagName("span")[0]; // 進度條數字

for(var i =0,j=arr.length;i<j;i++){ // 初始化數組,并将每一項的值都設為false

marr[i] = false;

}

function include_js(file,index) { // 檢測是否加載完成,并添加到head中

var _doc = document.getElementsByTagName('head')[0];

var js = document.createElement('script');

js.setAttribute('type', 'text/javascript');

js.setAttribute('src', file);

_doc.appendChild(js);

if (document.all) { //如果是IE

js.onreadystatechange = function () {

if (js.readyState == 'loaded' || js.readyState == 'complete') {

marr[index] = true;

else {

js.onload = function () {

for(var i = 0,j=arr.length;i<j;i++){ // 向head中添加每一項

include_js(arr[i],i);

var stop = setInterval(function(){

var index = 0; // 統計目前的總共加載完畢的個數

for(var i=0,j=marr.length;i<j;i++){

if(marr[i] === true){

index++;

mtestspan.innerHTML= parseInt((index/marr.length)*100)+"%";

mtestdiv.style.width = parseInt((index/marr.length)*100)*2+"px";

if(index === marr.length){ // 加載完成

mtest.parentNode.removeChild(mtest);

clearInterval(stop);

timing+=60;

if(timing>maxtime){ // 加載失敗

mtest.innerHTML= "頁面加載失敗!";

},60);

</script>

</body>

</html>

運作代碼

繼續閱讀