jquery實現頁面加載進度條(轉)


實現原理:

根據頁面執行js的順序將遮罩層和loading圖片最先顯示出來,等到頁面加載完成后,用js控制圖片消失。既在網頁的頭部放置一個文字或者圖片的 loading 狀態,然后頁尾載入一段 JS 隱藏掉,根據瀏覽器的載入順序來實現的簡易 Loading 狀態條。

比較簡單的步驟是:

1、首先在<body></body>開始的地方放置

<div id="loading"></div>

2、在<head>和</head>之間放置樣式和jquery框架

<style type="text/css">
#loading{z-index:1;padding:5px 0 5px 29px;
background:url(images/loadingwy.gif) no-repeat 10px top;left:0;top:0;width:90px;
position:fixed; height:21px}
</style>
<script type="text/javascript" src="images/jquery.js"></script>

3、在頁面的底部放置

<script type="text/javascript">
$("#loading").fadeOut()
</script>

  一個在線生成loading圖片的網站:http://preloaders.net/

進一步的分析

 

loading Process traditional

 

上圖展示了傳統 Wordpress 模板在瀏覽器中的載入順序,Loading 條的出現和消失分布於頭尾。

 

new loading bar


如 果我們在頁面的不同位置放置多個 JS ,每個 JS 用於逐步增加 Loading 條的寬度,那么這個 Loading 條無疑會更具實用價值。它在一定程度上緩解了訪客等待載入的枯燥感,同時還能客觀反映頁面載入的進度。若再配以 jQuery 內建的動畫效果,其完全可以與瀏覽器自帶的狀態條媲美。
1、引入 jQuery 框架(一定要放在頁頭 <head> 標簽內)。然后在 <body> 標簽起始位置放置:

<div id="loading"><div></div></div> 
css代碼為
#loading {
width:100px;
height:20px;
background:#A0DB0E;
padding:5px;
position:fixed;
left:0;
top:0;
}
#loading div {
width:1px;
height:20px;
background:#F1FF4D;
} 

 2、在模板各個部分的適當位置放置

<script type="text/javascript">
$("#loading div").animate({width:"16px"})
</script> 

3、在 footer.php 最末尾放上:

<script type="text/javascript">
$("#loading").fadeOut()
</script> 

用於載入完畢后隱藏進度條。

加入百分比提示的進度條

1、首先在你要顯示進度條的位置加上標簽,寬度初始設置0px,然后運用jquery的animate動畫效果在相應的位置一個一個增加寬度,比如在正文頂部加上如下:

<script type="text/javascript">
    $("#loading").animate({width:"30px"}).text("30%")
</script>

 #loading是進度推進部分,並顯示文字"30%"。按照圖里一個一個加到相應位置,改下width和text屬性就基本實現進度條了。

進度條是在這個基礎上改進的,我的進度條結構是這樣的:

<div id="loadbg"></div>
<div id="reloading">
  <div id="loadfull"></div>
  <div id="loadpercent"></div>
  <div id="loadtext">努力載入中.....</div>
</div>

2、百分比顯示和"加載完畢"以及讓進度條消失的jquery代碼:

//進度條
function remindload(loadpercent) {
var text="努力加載ing..."
if (loadpercent) {
$('#loadtext').html(String(loadpercent) + "%"+text); //顯示百分比
}
}
var i = 0;
function loadover() {
if (i > 100) { //當大於100%時消失進度條
$('#loadtext').html("加載完畢!").fadeIn("slow");//加載完畢提示
$('#loadpercent').animate({width:"0px"},2000); //減少#loadpercent的寬度,消失效果
$('#loadbg,#reloading>div').fadeOut(1600);//進度條消失
return;
}
if (i <= 100) { //百分比計數,延遲加載
setTimeout("loadover()", 100);
remindload(i);
i=i+5;
}
}
$(document).ready(function() {
loadover();
}); 

3、css代碼

/*loading*/
#loadbg{z-index:1;left:400px;top:255px;position:fixed;background:#d2d2d2;width:400px;height:88px;opacity:.6}
#reloading{z-index:1;left:400px;top:255px;position:fixed;}
#reloading div{position:absolute;}
#loadfull,#loadpercent{height:28px;margin:30px 0 0 50px;}
#loadfull{background:white;width:300px;opacity:.7}
#loadpercent{background:#000;width:0px;opacity:.8}
#loadtext{font-size:14px;z-index:2;width:300px;color:#fff;padding:35px 0 5px 59px;}

4、判斷代碼修改一下上面的loadover函數:

function loadover() {
if($.browser.msie&&!$.support.style)//判斷的是IE內核,IE9卻是直接不在此列,HOHO~
{
$('#loadtext').html("請使用<a href='http://www.google.com/chrome/index.html?hl=zh_cn&brand=CHMA&utm_campaign=zh_cn&utm_source=zh_cn-ha-apac-zh_cn-bk&utm_medium=ha' target='_blank'>Chrome</a>或者<a href='http://firefox.com.cn/' target='_blank'>Firefox</a>獲得最佳瀏覽體驗!").fadeIn("slow");  
        setTimeout(function() { 
            $('#loadbg,#reloading>div,#loadpercent').fadeOut(1600); 
        }, 5000);  //5秒后消失
}
else if (i>100) {
$('#loadtext').html("加載完畢!").fadeIn("slow");//加載完畢提示
$('#loadpercent').animate({width:"0px"},2000); //減少#loadpercent的寬度,消失效果
$('#loadbg,#reloading>div').fadeOut(1600);
return;
}

使用遮罩層的具體案例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fortestҳ</title>
<link href="../style/css.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../js/jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="../js/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="../js/jquery.modal.js"></script>
<style type="text/css">
#grey_div{
position:absolute;
background:#cccccc;
left:0px;
top:0px;
filter:Alpha(Opacity=30);
/* IE */
-moz-opacity:0.4; 
/* Moz + FF */
opacity: 0.4; 
}
#xs3{
background:#FFFFFF;
position:absolute;
border:1px solid #CC66CC;
display:none;
}
</style>
</head>
<body>
<div id="xs3">
  <table width="300" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td width="107" height="81">&nbsp;</td>
      <!--loading的圖片-->
      <td width="220" height="19"><img src="../images/loading.gif" width="220" height="19" /></td>
      <td width="108" height="81">&nbsp;</td>
    </tr>
    <tr>
      <td height="30" colspan="3" style="text-align:center; color:#FF0000; font-size:14px;">頁面加載中...</td>
    </tr>
  </table>
</div>
<script type="text/javascript">
//一開始就顯示遮罩和loading圖片
$.md({modal:"#xs3"});
</script>
<div style="width:1440px;height:900px;overflow:hidden;">
測試頁面
</div>
<script type="text/javascript">
//頁面加載完成時去除遮罩
$("#xs3").remove();
$("#grey_div").remove();
</script>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM