据我了解,您正在尝试以$("#loadingMessage").html()
您的浏览器可能无法跟上的快速速度更新 DOM。每次页面更改或调整大小时,您的浏览器都会执行一种称为重排的操作。可以这么说,渲染变化。
为了让您在每次函数完成时生成回流,您必须$.Deferred
按照评论中的说明将此函数包装在对象或 webworker 中,或者创建自己的自定义回调。工作完成后,这些函数将生成回调供您选择并显示您的进度。
$.Deferred 对象的一个很好的包装可以在 jQuery.animate()
或$.ajax()
. 由于我不知道您将如何在每个步骤中验证您的 loadingProgress,因此我结合.animate()
了一个.progressbar()
小部件和一个自定义回调,您可以稍后对其进行修改。
为了伪造你的行为,jQuery 的 $.Deferred 包装器,用于页面加载,例如 document.ready 和 window.load,是完美的。在此时间范围内,我可以加载进度条并使用.animate()
. 我将在这里展示基础知识并创建一个 jsfiddle 来查看它的运行情况。例如,我可以想到一个填充了 URL 的数组来使用 ajax 加载外部脚本。
简而言之,执行以下操作:
// once the dom is ready
$(function () {
bar = $(".progressbar");
buildMyProgressbar.init();
buildMyPage.init();
});
// once the page is loaded
$(window).load(function () {
buildMyProgressbar.stop();
});
当进度条被初始化时,使用.animate()
. 我将传入一个pageload
,它只不过是一个进度步骤的数字 ID,或者我称之为“工作”和“工作”的数量。
animation: function (pageload) {
$({
job: pageload.fakeJob // starts at 1
}).animate({
job: pageload.fakeJobs // end at jobs.length
}, {
duration: 1000,
step: function () {
var percent = Math.round((this.job / pageload.fakeJobs) * 100),
percentString = percent + "%";
// verify your job is loaded
if (buildMyPage.isJobLoaded(this.job)){
bar.children().eq(0).css({ width: percent + "%" }).text("loading: " + percent);
}
},
complete: function(){
bar.children().eq(0).text("complete");
}
});
}
jQuery UI 进度条:http: //jqueryui.com/progressbar/
演示:http: //jsfiddle.net/tive/b2Utn/