4

在用户控制页面之前,我需要加载多个元素(主要是图像、视频和音频)。目前,我正在使用 $.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 来完成吗?

提前致谢!

4

3 回答 3

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

于 2011-12-09T07:39:57.560 回答
3

您可以使用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);
}
于 2011-12-09T07:35:17.897 回答
0

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

于 2011-12-09T07:45:49.083 回答