用javascript在网页中模拟进度条

进度条在windows系统中非常常见,像常见的软件安装部署等。它能够提示用户系统正在运行而不是被卡死,从而避免了用户错误操作,提高了用户体验。在web中,我们可能也会遇到前台和服务器交换大量数据,这时候我们就需要给用户一个良好的提示。如在一些图片浏览网站,当我们点击观看下一张图片时,很多都做了一个正在加载的提示,个人觉得这些提示不仅仅能够留住浏览者,也是衡量一个网站是否真正尊重用户的标志。

当然,这些图片浏览网站,我们没有必要去告诉用户图片下载了多少,因为一个图片顶多就几M,也不会占用太多的下载时间。但是在一些特殊的情况下,用户可能需要等待的时间比较长,这时候如果能够用进度条展示当前任务的完成度是比较好的。

例如,客户端有连续100个请求需要发送到服务器,请求的数据都比较小,但是需要占用服务器比较长的计算时间,这时候我们可以通过Ajax的方式向服务器发送数据,每成功返回一次数据,就在客户端的进度条上显示1%,用户能够知道当前的状态,从而合理安排自己的时间,可以说,这样的网站,用户体验才是最好的。那么,怎么样去做呢?其实实现起来不难,ajax每次执行成功,可以调用一个回掉函数,我们可以通过回掉函数来显示这个进度条。我的代码是这样的:

<!DOCTYPE HTML>
<html>
	<body>
	</body>
	<script>
		function Processbar(w,h,bc,pc){
			var w=w;	//长度
			var h=h;	//宽度
			var bordc=bc;	//进度条边框
			var processcolor=pc;//进度条颜色
			var bar=document.createElement("div");
			var process=document.createElement("div");
			this.show=function(){
				bar.style.width=w;
				bar.style.height=h;
				bar.style.border="1px solid "+bordc;
				bar.style.borderRadius="5px";
				process.style.width="0px";
				process.style.height=h;
				process.style.borderRadius="5px 0 0 5px";
				process.style.background=processcolor;
				bar.appendChild(process);
				document.body.appendChild(bar);
			}
			this.process=function(s){
				//参数s为速度,百分比,填10则为10%
				var speed=parseInt(w)*s/100;	//每次进行的实际长度
				var processwidth=process.offsetWidth;//当前进度条的宽度
				if(processwidth<=bar.offsetWidth-speed){
					process.style.width=processwidth+speed+"px";
					}else{
					process.style.width=w;
					process.style.borderRadius="5px"
					return ;
				}
			}
		}
		var a=new Processbar("500px","30px","#ccc","red");
		a.show();
		setInterval(function(){
			a.process(1);
		},100)
	</script>
</html>

在上面这个例子,创建了一个 Processbar的类,这个类一共有两个方法,show()方法用来把进度条插入到页面当中,process()方法用来使进度条的数据往上累加。它接受一个参数,用来表示每调用一次,当前进度条提示完成的百分比,如果填入1,则调用100次就能填满进度条。下面的setInterval是简单模拟请求,实际需求当中这样做的应该会比较少。点击预览

发表回复