如何创建一个jQuery加载栏? (就像在flash网站上使用的那些)

时间:2011-12-09 07:30:20

标签: javascript jquery progress-bar jquery-deferred

我需要在用户控制页面之前加载多个元素(主要是图像,视频和音频)。目前,我正在使用$ .when()函数加载它们,如下所示:

//all elements are hidden, except for a black background and
//a "loading" gif in the middle.

$.when($.ajax("video1.ogv"), $.ajax("video2.ogv"), $.ajax("videoN.ogv"))
.then(function () {
   //show the site with all the content preloaded...
});

有没有办法创建一个加载栏,显示后台加载的所有元素的进度(百分比)?就像大多数拥有大量媒体的Flash网站所发生的情况一样,例如:http://www.saizenmedia.com/nightwishsite/

可以用jQuery或Javascript完成吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

您可以使用Progress Bar from jQuery UI

加载每个元素后,只需更改进度条的值。

$.when($.ajax("video1.ogv"))
.then(function () {
    videoLoaded[1] = true;
    updateProgressBar();
});

$.when($.ajax("video2.ogv"))
.then(function () {
    videoLoaded[2] = true;
    updateProgressBar();
});

$.when($.ajax("video3.ogv"))
.then(function () {
    videoLoaded[3] = true;
    updateProgressBar();
});

var updateProgressBar = function() {
    // iterate though the videoLoaded array and find the percentage of completed tasks
    $("#progressbar").progressbar("value", percentage);
}

答案 1 :(得分:3)

jQueryUI Progressbar是一个功能强大的API,用于创建自定义加载栏。您可以将其与jQuery Deferred API结合使用以执行类似

的操作
var ProgressBar = {
    advance : function(percent){
        return $.Deferred(function(dfr){
            $(‘.progressbar’).animate({width:percent + ‘%’}, dfr.resolve);
        }).promise();
    }
};

ProgressBar.advance(86).then(function(){
    //do something neat
});

(通过http://www.decipherinc.com/n/blog/development-and-engineering-team/2011/06/working-jquery-s-deferred-0

答案 2 :(得分:0)

使用jQuery-ui应该不那么困难。如果您知道必须等待的元素总数,则可以创建它并更新进度条:http://jsfiddle.net/melachel/4mh7Q/