I try to take a processbar myself, without JQuery,
I do it one by one,
step 1
the origin code, coding hard, not sort, for read it to easy
<html>
<head>
<title></title>
<style>
</style>
<script>
window.onload=function(){
init();
}
var per=0; //0-100, not 0-1.0
function tout(){
var e=document.getElementById("pbar");
e.style.visibility="visible";
var lbl=document.getElementById("lblBar");
var total=document.getElementById("d2").offsetWidth;
var value=per*0.01*total-2; //2px for border left & right
e.width=value;
lbl.innerHTML=per+"%";
if(per>=100)
return;
per+=5;
setTimeout(tout, 100)
}
function init(){
//move the label lblBar("100%") to fit processbar width, height, and center
var d1=document.getElementById("d1");
var d2=document.getElementById("lblBar");
var x=d1.offsetLeft, y=d1.offsetTop;
d2.style.position="absolute";
d2.style.left=x;
d2.style.top=y;
}
function setTotalWidth(){
var e=document.getElementById("txtWidth");
var width=e.value;
var d2=document.getElementById("d2");
d2.style.width=width+"px";
e=document.getElementById("lblBar");
e.style.width=width+"px";
alert(width);
}
</script>
</head>
<body>
<div id="d1" style="width: auto">
<div id="d2" style="background: url('images/bg.gif'); width: 100px; height: 22px; border: 1px solid #777;"><img id="pbar" style="visibility: hidden" src="images/on.gif" width="0" height="22" /></div>
<label id="lblBar" style="height: 22px; width: 100px; line-height: 22px; text-align: center">0%</label>
</div>
<input id="txtWidth" type="text" value="100" /><input type="button" value="TOTAL WIDTH" onclick="setTotalWidth()" />
<input type="button" value="START" onclick="tout()" />
</body>
</html>
here is result
step 2
now, begin optimize
resize gif, reduce bar-bg.gif & bar-on.gif to 1 width, separator with 2 file, not combine to 1X44px file, else the bar-on effect will be damaged
coding css style to div d2:
style="background: url('images/bar-bg.gif') repeat-x; width: 100px; height: 22px; border: 1px solid #777;"
pls note the result I want is: repeat-x 1 px gif
step 3
remove html code, encapsulate with JS
<html>
<head>
<title></title>
<style>
</style>
<script>
(function(){
var Pbar=function(id){
this.per=0;
var txt="<div id=\"d2\" style=\"background: url('images/bar-bg.gif') repeat-x; width: 100px; height: 22px; border: 1px solid #777;\"><img id=\"pbar\" style=\"visibility: hidden\" src=\"images/bar-on.gif\" width=\"0\" height=\"22\" /></div>\n"
+"<label id=\"lblBar\" style=\"height: 22px; width: 100px; line-height: 22px; text-align: center\">0%</label>";
var e=document.getElementById(id);
e.innerHTML=txt;
this.init();
}
Pbar.prototype.init=function(){
var d1=document.getElementById("d1");
var d2=document.getElementById("lblBar");
var x=d1.offsetLeft, y=d1.offsetTop;
d2.style.position="absolute";
d2.style.left=x;
d2.style.top=y;
}
Pbar.prototype.processBar=function(n){
this.per+=n;
var e=document.getElementById("pbar");
e.style.visibility="visible";
var lbl=document.getElementById("lblBar");
var total=document.getElementById("d2").offsetWidth;
var value=this.per*0.01*total-2;
e.width=value;
lbl.innerHTML=this.per+"%";
if(this.per>=100)
return;
}
window.$Pbar=Pbar;
})();
var bar;
window.onload=function(){
bar=new $Pbar("d1");
}
function demo(){
if(bar.per>=100)
return;
bar.processBar(10);
setTimeout(demo, 200);
}
</script>
</head>
<body>
<div id="d1">
<!--
<div id="d2" style="background: url('images/bar-bg.gif') repeat-x; width: 100px; height: 22px; border: 1px solid #777;"><img id="pbar" style="visibility: hidden" src="images/bar-on.gif" width="0" height="22" /></div>
<label id="lblBar" style="height: 22px; width: 100px; line-height: 22px; text-align: center">0%</label>
-->
</div>
<input id="txtWidth" type="text" value="100" /><input type="button" value="TOTAL WIDTH" onclick="setTotalWidth()" />
<input type="button" value="START" onclick="if(100==bar.per) bar.per=0;demo()" />
</body>
</html>
step 4
add dynamic width into class, and detach div, img, label to respective object.
add showText option, to show bar% text or not, because the valign present not well when it special width to the <div id="d1">
<html>
<head>
<title></title>
<style>
</style>
<script>
(function(){
var Pbar=function(id, totalWidth, showText){
this.per=0;
this.totalWidth=totalWidth;
this.div=id+"_pbarUtil_Bg";
this.bar=id+"_pbarUtil_Bar";
this.showText=showText;
this.barText=id+"_pbarUtil_BarText";
var txt="<div id='"+this.div+"' style='background: url(\"images/bar-bg.gif\") repeat-x; width: "+this.totalWidth+"; height: 22px; border: 1px solid #777;'><img id='"+this.bar+"' style='visibility: hidden' src='images/bar-on.gif' width='0' height='22' /></div>\n";
if(this.showText)
txt+="<label id='"+this.barText+"' style='height: 22px; width: "+this.totalWidth+"; line-height: 22px; text-align: center'>0%</label>";
var e=document.getElementById(id);
e.innerHTML=txt;
this.init();
}
Pbar.prototype.init=function(){
if(!this.showText)
return;
var d1=document.getElementById(this.div);
var d2=document.getElementById(this.barText);
var x=d1.offsetLeft, y=d1.offsetTop, w=d1.offsetWidth;
d2.style.position="absolute";
d2.style.left=x;
d2.style.top=y;
d2.style.width=w;
}
Pbar.prototype.processBar=function(n){
this.per+=n;
var e=document.getElementById(this.bar);
if(e.style.visibility=="hidden")
e.style.visibility="visible";
var total=document.getElementById(this.div).offsetWidth;
var value=this.per*0.01*total-2;
e.width=value;
if(this.showText){
var lbl=document.getElementById(this.barText);
lbl.innerHTML=this.per+"%";
}
if(this.per>=100)
return;
}
window.$Pbar=Pbar;
})();
var bar;
function setTotalWidth(){
//as per IE compatible, the auto bar% text can't valign middle well
//so set Pbar showText false, draw bar% with below span lblBar, custom x, y and style feedom
var w=document.getElementById("txtWidth").value;
bar=new $Pbar("d1", w, false);
//custom lblBar position
var d=document.getElementById("d1");
var e=document.getElementById("lblBar");
var x=d.offsetLeft, y=d.offsetTop;
e.style.position="absolute";
e.style.left=x+"px";
e.style.top=y+"px";
e.style.width=w;
}
function demo(){
if(bar.per>=100)
return;
bar.processBar(10);
var e=document.getElementById("lblBar");
e.innerHTML=bar.per+"%";
setTimeout(demo, 200);
}
</script>
</head>
<body>
<div>
<div id="d1" style="width: 60%;">
<!--keep inner empty-->
</div>
<!-- set Pbar showText false, draw bar% with below span lblBar, custom x, y and style feedom -->
<span id="lblBar" style="height: 22px; line-height: 22px; text-align: center">0%</span>
</div>
<br />
<hr size="1" />
<input id="txtWidth" type="text" value="100" /><input type="button" value="TOTAL WIDTH" onclick="setTotalWidth()" />
<input type="button" value="START" onclick="if(100==bar.per) bar.per=0;demo()" />
</body>
</html>
the result in IE, FF, Chrome, looks like no bad, hoho~
- 大小: 6.9 KB
- 大小: 54 KB
分享到:
相关推荐
在本文中,我们将深入探讨如何创建和使用进度条(processBar),以及在实际应用中的一些关键点。 1. **进度条的基本概念** - **类型**:进度条通常分为两种类型,一种是确定性进度条,显示明确的进度百分比;另一...
标签"web_process_bar"进一步确认了这个主题,它是针对Web环境中的进度条,可能涉及到HTML、CSS和JavaScript等前端技术。HTML用于构建页面结构,CSS用于样式设计,而JavaScript则用于动态更新进度条的状态和响应用户...
用html5开发的进度条,方便大家的使用
在提供的"processbar.rar"文件中,可能包含了实现这种功能的JavaScript代码、CSS样式和HTML结构。解压后,你需要查看相关文件以了解具体实现。通常,这些文件会包含一个模拟进度的div元素,一个用于发送Ajax请求的...
HTML5是现代网页开发的重要标准,它引入了许多新的元素和特性,使得开发者能够构建更加丰富、交互性更强的网页应用。在HTML5中,`<canvas>`和`<progress>`标签是实现进度条效果的两种主要方法。 1. **<canvas> 标签...
HTML5引入了`<input type="file" multiple>`属性,允许用户一次性选择多个文件。同时,我们可以通过JavaScript或者jQuery来获取选中的文件,并进行预览。预览功能通常通过创建一个`<img>`标签,并将文件的Blob对象...
var processbar = document.getElementById("processbar"); processbar.innerHTML = processbar.style.width; var width = processbar.style.width var newstr = parseInt(width); if (newstr == 100) { ...
采用ajax技术实现大批量数据批量生成Html,并带进度条效果的实现代码.... 里面有两个页面,Index.Html进度条显示效果页面,Post.asp是处理页面. <br>演示地址:http://www.qjob.cn/processbar
这里的`$("#processbar")`是jQuery的选择器,用于选取页面中ID为"processbar"的元素,这通常是一个包含进度条的div元素。`.progressBar(30)`则是调用一个名为`progressBar`的插件方法,将该元素转换为进度条,并设定...
"process.rar彩虹进度条"可能是一个包含HTML和JavaScript代码的压缩包,用于创建一个动态、多彩的加载进度条效果。这样的效果可以提高用户体验,尤其是在进行长时间操作时,如文件上传、数据处理或下载等,让用户...
要开始使用这个插件,你需要在HTML文件中引入jQuery库和ProgressBar插件的JS文件,然后选择一个HTML元素作为进度条容器,最后通过JavaScript初始化并设置参数。例如: ```html <!DOCTYPE html> <html lang="zh"> ...
1. HTML/CSS:使用HTML元素如`<progress>`来创建基础的进度条,并通过CSS进行样式定制,包括颜色、宽度、高度以及填充部分的样式。对于百分比显示,可以在HTML中添加一个额外的元素(如`<span>`),并通过JavaScript...
path('process_data/', process_data, name='process_data'), ] ``` 通过以上步骤,我们就实现了一个简单的Django后端进度条功能,前端可以通过Ajax实时获取并更新进度。这个例子展示了如何在Django中集成进度条...
<div class="process-bar"> 步骤1 步骤2 步骤3 ``` CSS(层叠样式表)则是用来美化这些HTML元素的关键,通过设置颜色、边框、宽度等样式来实现流程状态条的视觉效果。我们可以为不同的状态(如已完成、进行中、...
在`Processbar.js`中,我们通常会看到一个名为`ProgressBar`的构造函数,该构造函数接受一些初始化参数,如进度条ID、初始值、最大值等。构造函数内部会创建DOM元素,如`<div>`用于进度条的容器,以及可能的子元素,...
为了提高用户体验,可以添加一个进度条组件(如文件名processbar暗示的那样),实时显示数据加载进度。这通常通过计算已加载数据量与总数据量的比例来实现。可以使用CSS和JavaScript来创建和更新进度条的视觉效果。 ...
processbar.style.width = parseInt(processbar.style.width) + 1 + "%"; processbar.innerHTML = processbar.style.width; if (processbar.style.width == "100%") { window.clearInterval(bartimer); } } var...
超酷炫CSS3发光字体.html./html-js-css/ionic-cordova学习.txt./html-js-css/ant.html./html-js-css/nodejs学习.txt./html-js-css/blur.html./html-js-css/hihack.js./html-js-css/js常用.txt./...
ProcessBar.nowObj.foreDiv.style.width = ProcessBar.nowObj.nowLength; // 更新宽度 // 如果需要,可以在这一段加入判断逻辑,比如达到最大值后重置 } ``` `moving`方法中通过修改前景div的宽度属性来模拟进度...