JavaScript进度条

时间:2010-04-01 09:09:37

标签: javascript progress-bar

我希望有一个进度条,当我点击一个按钮时会显示该进度条,例如“立即验证”。我的要求是检查2000个URL是否正常工作。这在程序执行时花了很多时间。因此,我需要向用户显示进度条以了解状态。我怎么能用JavaScript做到这一点?

6 个答案:

答案 0 :(得分:5)

您可以使用jQuery UI Progress bar简单,美观且易于实现,您只需每隔一两次更新一次值。

$("#progressbar").progressbar({
        value: 37
    });

答案 1 :(得分:1)

您必须每隔2-3秒使用Ajax并访问服务器/数据库并获取状态并在网页上显示。要显示进度条,您可以使用具有不同td的表格,并使用状态结果设置这些td单元格的背景颜色。

对于进度条创建一个包含10个宽度相等的单元格的表,并说状态为40%,然后设置前4个单元格的背景,表示40%。

答案 2 :(得分:0)

纯JavaScript是不可能的,您需要使用Ajax来获取需要服务器端脚本的当前状态(我想在您的情况下使用PHP)。

将完整和已完成的URL(或其计数)存储在数据库或会话中,并使用从JavaScript中获取已完成URL的百分比,由JavaScript Ajax请求调用。然后按照Prutswonder在另一个答案中建议的那样给jQuery栏指定百分比。

我建议使用JSON或简单的Plaintext来接收JavaScript中的数据,XML将是不必要的开销(因此它实际上是AJAJ或AJAP,而不是Ajax)。

答案 3 :(得分:0)

我找到了一个弹出的Javascript栏。可能需要进行一些修改以适应您的想法,但看起来很有希望。

代码是

<style>
<!--
.hide { position:absolute; visibility:hidden; }
.show { position:absolute; visibility:visible; }
-->
</style>

<SCRIPT LANGUAGE="JavaScript">

//Progress Bar script- by Todd King (tking@igpp.ucla.edu)
//Modified by JavaScript Kit for NS6, ability to specify duration
//Visit JavaScript Kit (http://javascriptkit.com) for script

var duration=3 // Specify duration of progress bar in seconds
var _progressWidth = 50;    // Display width of progress bar.

var _progressBar = "|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
var _progressEnd = 5;
var _progressAt = 0;


// Create and display the progress dialog.
// end: The number of steps to completion
function ProgressCreate(end) {
    // Initialize state variables
    _progressEnd = end;
    _progressAt = 0;

    // Move layer to center of window to show
    if (document.all) { // Internet Explorer
        progress.className = 'show';
        progress.style.left = (document.body.clientWidth/2) - (progress.offsetWidth/2);
        progress.style.top = document.body.scrollTop+(document.body.clientHeight/2) - (progress.offsetHeight/2);
    } else if (document.layers) {   // Netscape
        document.progress.visibility = true;
        document.progress.left = (window.innerWidth/2) - 100+"px";
        document.progress.top = pageYOffset+(window.innerHeight/2) - 40+"px";
    } else if (document.getElementById) {   // Netscape 6+
        document.getElementById("progress").className = 'show';
        document.getElementById("progress").style.left = (window.innerWidth/2)- 100+"px";
        document.getElementById("progress").style.top = pageYOffset+(window.innerHeight/2) - 40+"px";
    }

    ProgressUpdate();   // Initialize bar
}

// Hide the progress layer
function ProgressDestroy() {
    // Move off screen to hide
    if (document.all) { // Internet Explorer
        progress.className = 'hide';
    } else if (document.layers) {   // Netscape
        document.progress.visibility = false;
    } else if (document.getElementById) {   // Netscape 6+
        document.getElementById("progress").className = 'hide';
    }
}

// Increment the progress dialog one step
function ProgressStepIt() {
    _progressAt++;
    if(_progressAt > _progressEnd) _progressAt = _progressAt % _progressEnd;
    ProgressUpdate();
}

// Update the progress dialog with the current state
function ProgressUpdate() {
    var n = (_progressWidth / _progressEnd) * _progressAt;
    if (document.all) { // Internet Explorer
        var bar = dialog.bar;
    } else if (document.layers) {   // Netscape
        var bar = document.layers["progress"].document.forms["dialog"].bar;
        n = n * 0.55;   // characters are larger
    } else if (document.getElementById){
                var bar=document.getElementById("bar")
        }
    var temp = _progressBar.substring(0, n);
    bar.value = temp;
}

// Demonstrate a use of the progress dialog.
function Demo() {
    ProgressCreate(10);
    window.setTimeout("Click()", 100);
}

function Click() {
    if(_progressAt >= _progressEnd) {
        ProgressDestroy();
        return;
    }
    ProgressStepIt();
    window.setTimeout("Click()", (duration-1)*1000/10);
}

function CallJS(jsStr) { //v2.0
  return eval(jsStr)
}

</script>

<SCRIPT LANGUAGE="JavaScript">

// Create layer for progress dialog
document.write("<span id=\"progress\" class=\"hide\">");
    document.write("<FORM name=dialog id=dialog>");
    document.write("<TABLE border=2  bgcolor=\"#FFFFCC\">");
    document.write("<TR><TD ALIGN=\"center\">");
    document.write("Progress<BR>");
    document.write("<input type=text name=\"bar\" id=\"bar\" size=\"" + _progressWidth/2 + "\"");
    if(document.all||document.getElementById)   // Microsoft, NS6
        document.write(" bar.style=\"color:navy;\">");
    else    // Netscape
        document.write(">");
    document.write("</TD></TR>");
    document.write("</TABLE>");
    document.write("</FORM>");
document.write("</span>");
ProgressDestroy();  // Hides

</script>


<form name="form1" method="post">
<center>
<input type="button" name="Demo" value="Display progress" onClick="CallJS('Demo()')">
</center>
</form>

<a href="javascript:CallJS('Demo()')">Text link example</a>

<p align="center">This free script provided by<br />
<a href="http://www.javascriptkit.com">JavaScript
Kit</a></p>

在这里找到code

答案 4 :(得分:0)

您可以使用ProgressBar.js。没有依赖关系,简单的API并支持主流浏览器。

var line = new ProgressBar.Line('#container');
line.animate(1);

查看更多使用示例in the demo page.

答案 5 :(得分:0)

您可以通过在某个时间间隔增加div宽度来制作进度条。

例如,您可以在每50毫秒增加div的1px宽度,例如

var width = 1
function render (){
    if(width <=100){
        // apply width to div for progress bar
        div.style.width = width + "px";
        setTimeout(
            function (){
                render();
                width++;
            },50
        );
    }
}
render();

您可以通过Progress Bar by JavaScript

获取完整的代码和步骤