我需要在用户控制页面之前加载多个元素(主要是图像,视频和音频)。目前,我正在使用$ .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完成吗?
提前致谢!
答案 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
});
答案 2 :(得分:0)
使用jQuery-ui应该不那么困难。如果您知道必须等待的元素总数,则可以创建它并更新进度条:http://jsfiddle.net/melachel/4mh7Q/