首先要给网页加上进度条的代码。如 aw 所言,进度条的位置很重要。如果你的 <head> 部分要加载的东西太多,导致网页迟迟显示不出来,那进度条也没必要加了。用户可能等不及进度条显示出来就关闭页面了。针对这个问题,我作了手动的优化,让自己的页面在 <head> 部分只加载 CSS 和 favicon,至于 javascript 统统挪到后面。这样打开网页的时候就能迅速地显示出进度条,起到提示的作用。
HTML 代码我加在 <body> 的后面了,内容如下,这个“载入中”的提示也可以用 Javascript 输出(有利于SEO)
<div id=”progressbar”>
<span id=”progressdone”></span>
<span id=”progressing”></span>
<span id=”progresstip”>载入中…</span>
</div>
progressbar 用来包含内部的三个 span,并进行统一的定位。内部的三个 span 各司其职,progressdone 用来显示已完成的进度,progressing 用来显示进度条的底色,progresstip 则是载入中的文字提示。
接下来是三者的 CSS 样式,决定了这个进度条显示出来会是什么样子。
#progressbar{
top:0;
left:0;
position:fixed; /* 固定在浏览器窗口的左上角 */
border:none;
z-index:4;
}
#progressbar span{
position:absolute; /* 绝对定位 */
height:1.5em;
opacity:0.6;
}
#progressdone{
background:#888; /* 底色 */
100px; /* 进度条宽度 */
z-index:5;
}
#progressing{
background:#454545; /* 进度的颜色 */
6px; /* 初始宽度 6 */
z-index:5;
}
#progresstip{
font-size:12px;
font-weight:lighter;
text-align:center;
vertical-align:middle;
z-index:7;
100px;
color:#FFF;
}
接下来是用 Javascript 来动态地控制进度的显示。由于 js 中并没有一种完善的方法可以判断浏览器加载的情况,所以只好用土办法直接上了。
土办法就是在页面的不同位置加上不同的进度值。比如我的页面在文章显示完后显示为 50%,在评论加载完成后显示为 75%,最后的 25% 留给页面的侧边栏和底部。查看我的页面源代码就可以看到 jQuery 控制的进度值:
<script type=”text/javascript”>$(‘#progressing’).width(25);</script>
没有 jQuery 库也可以直接用 javascript 来搞定
<script type=”text/javascript”>
// <![CDATA[
document.write('<style type="text/css">#progressing{25px;}</style>');
// ]]>
</script>
这样就实现了对进度的控制,在页面的不同地方放上不同的加载值,这要改一下主题的源文件。
最后在 <body> 前插入一段 js 代码来终止这个进度条的使命:
<script type=”text/javascript”>
$(‘#progressing’).width(97);
$(document).ready(function(){ // document 加载完的时候
$(‘#progressing’).width(100); // 宽度调整为 100px
$(‘#progresstip’).html(’100%’); // 进度字符显示 100%
// 停顿 0.5 秒后,将进度条隐藏
setTimeout(function(){$(‘#progressbar’).hide();}, 500);
});
</script>
没有 jQuery 的版本要麻烦一点:
<script type=”text/javascript”>
//<![CDATA[
document.write('<style type="text/css">#progressing{97px;}</style>');
function hideProgressBar(){
document.write('<style type="text/css">#progressbar{display:none;}</style>');
}
function finishMyProgress(){
document.write('<style type="text/css">#progressing{100px;}</style>');
document.getElementById('progresstip').innerHTML = '100%';
setTimeout(hideProgressBar, 500);
}
document.body.onload = finishMyProgress;
//]]>
</script>