<!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> <title>javascript进度条DEMO 作者:记忆中的马肠河</title> <script type="text/javascript"> function ProgressBar(BarID){ this.BarObj=document.getElementById(BarID); this.BarObj.style.width='100px'; this.BarObj.style.height='10px'; this.BarObj.style.border='1px solid black'; } ProgressBar.prototype.progressRateTo=function(pr){ //如果不传参数默认为100,timerID为定时器ID,divControlRate为控制进度条宽度的div,showRateDiv用于展示进度%的div var pRate=parseInt(pr)||100,timerID,divControlRate,showRateDiv=document.createElement("div"); showRateDiv.style.position='absolute';showRateDiv.id='showRate'; //如果pr大于100 赋值为100 pRate = pr>100?100:pr; if(this.BarObj.getElementsByTagName("div").length==0){ var d=document.createElement("div"); d.style.width="0px";d.style.height="10px"; d.style.backgroundColor='red'; this.BarObj.appendChild(d); divControlRate=d; }else{ divControlRate=this.BarObj.getElementsByTagName("div")[0]; divControlRate.style.width=divControlRate.clientWidth+1+"px"; } if(document.getElementById("showRate")){ this.BarObj.removeChild(document.getElementById("showRate")); } //进度百分比计算 var f=Math.floor(divControlRate.clientWidth/this.BarObj.clientWidth*100)+"%"; showRateDiv.style.top=divControlRate.offsetTop+divControlRate.offsetHeight+"px"; showRateDiv.style.left=divControlRate.offsetLeft+divControlRate.offsetWidth+"px"; //放到div里 showRateDiv.innerHTML=f; //把控制进度条的进度的div加进进度条 this.BarObj.appendChild(showRateDiv); if(divControlRate.clientWidth==pRate){ clearTimeout(timerID); return; } //把this赋值给self,以便setTimeout调用函数 var self=this; timerID = setTimeout(function(){ self.progressRateTo(pRate); },20); } window.onload=function(){ var pb=new ProgressBar("div1"); pb.progressRateTo(120); } </script> </head> <body> <div id='div1'></div> </body> </html>