js其实是没法计算到网页的加载进度的。
目前见到的打开页面显示进度的有两种
1、如果是flash做的,那是flash自身的加载进度。
2、如果是js做的,做法比较简单,就是在页面的不同的地方插入script标签,动态改变进度的值。
<html><head>
<script>
var processPer = 0
window.onload = function(){
document.getElementById('process').innerHTML = processPer
}
</script>
</head>
<body>
<div id="process"></div>
<div></div>
....
<script>
processPer = 30
document.getElementById('process').innerHTML = processPer
</script>
<div></div>
....
<div></div>
....
<script>
processPer = 100
document.getElementById('process').innerHTML = processPer
</script>
</body>
</html>
类似这样的,就可以实现了进度的动态改变。
ajax文件上传的进度条实现<!DOCTYPE html>
<html>
<head>
<title>html5_2.html</title>
<meta http-equiv="content-type" content="text/htmlcharset=UTF-8">
<style type="text/css">
#parent{width:550pxheight:10pxborder:2px solid #09F}
#son {width:0height:100%background-color:#09Ftext-align:centerline-height:10pxfont-size:20pxfont-weight:bold}
</style>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
<script type="text/javascript">
function showPic(){
var pic = $("#pic").get(0).files[0]
$("img").prop("src" , window.URL.createObjectURL(pic) )
uploadFile()
}
function uploadFile(){
var pic = $("#pic").get(0).files[0]
var formData = new FormData()
formData.append("file" , pic)
/**
* 必须false才会避开jQuery对 formdata 的默认处理
* XMLHttpRequest会对 formdata 进行正确的处理
*/
$.ajax({
type: "POST",
url: "upload",
data: formData ,
processData : false,
//必须false才会自动加上正确的Content-Type
contentType : false ,
xhr: function(){
var xhr = $.ajaxSettings.xhr()
if(onprogress &&xhr.upload) {
xhr.upload.addEventListener("progress" , onprogress, false)
return xhr
}
}
})
}
/**
* 侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次
*/
function onprogress(evt){
var loaded = evt.loaded//已经上传大小情况
var tot = evt.total //附件总大小
var per = Math.floor(100*loaded/tot) //已经上传的百分比
$("#son").html( per +"%" )
$("#son").css("width" , per +"%")
}
</script>
</head>
<body>
<img width="400" height="250"/><br />
<input type="file" id="pic" name="pic" onchange="showPic()"/>
<input type="button" value="上传图片" onclick="uploadFile()" /><br />
<div id="parent">
<div id="son"></div>
</div>
</body>
</html>