(请参阅底部的更新)
我已经查看了几十个问题,但无法完成这项工作。
鉴于下面的代码,我如何强制它在每次迭代后更新我的简单进度指示器 ($("#log"))?
编辑:我认为这个 JSFiddle 体现了我的问题:http: //jsfiddle.net/kPRky/
这是 HTML:
<div id="test"></div>
<div id="log"></div>
这是调用函数的方式:
$("#test").html(createLevelMap());
这就是功能
function createLevelMap() {
var height = 300;
var width = 1000;
var totalpixels = height * width; //used for calculating loading percentages;
var currentpixel = 0; //used for calculating loading percentages;
var x = 0;
var y = 0;
//lots of other variables
for (x = 0; x < width; x += 1) {
for (y = 0; y < height; y += 1) {
//lots of calculations with lots of variables
currentpixel += 1;
$("#log").html((currentpixel / totalpixels) * 100 + "%");
}
}
return ('done'); //actually returns a very long base64 encoded string
}
更新
我简化了它,以便我有一个单独的函数来呈现每一列,而不是整个网格。但是,使用 setTimeout 仍然无法正确显示进度。
for (x = 0; x < width; x += 1) {
$("#log").html(((x + 1) / width) * 100 + "%<br>(sliver " + (x + 1) + "/" + width + ")");
setTimeout(createSliver(x), 100);
}
^^ 这会产生我期望的输出,但没有百分比更新。我将其更改为 setTimeout(function() { createSliver(x) }, 100); 按照评论中的建议,然后我什至没有得到我的输出(也仍然没有增加百分比)。