我有一个像这样的循环
for(i = 0; i < 50000; i++){
$('body').append("<div>lol</div>');
}在Opera浏览器中,我可以看到元素div的内容"lol“被”追加“在屏幕上。
但在Chrome、Firefox、IE等浏览器中,我只能在循环结束时看到div
如何迫使他们使用Js/Jquery或其他POG客户端解决方案来处理Opera工作?
发布于 2012-08-11 04:52:47
首先,这是非常糟糕的做法。每个append都强制进行重新布局,并像蛋糕一样消耗性能。
也就是说,运行循环会停止UI更新。所以只需要使用一个“异步循环”,一个带有超时调用的自引用函数来允许UI刷新。
var i = 5000;
var countdown = function () {
$("body").append("<div></div>");
if (i > 0) {
i--;
window.setTimeout(countdown, 0);
}
}
countdown();编辑:添加了实际的函数调用。
发布于 2012-08-11 04:55:40
使用带有setTimeout的递归函数。setTimeout允许浏览器在DOM更新之间更新UI。
function appendDiv(iteration, iterationLimit) {
$('body').append('<div></div>');
if(iteration <= iterationLimit) {
window.setTimeout(appendDiv, 1, iteration + 1, iterationLimit);
}
}https://stackoverflow.com/questions/11909040
复制相似问题