2012-06-01 38 views
2

我想在Javascript循环中强制重绘。例如:在Javascript循环中强制重绘

var s = document.getElementById("foo"); 
for (var i = 0; i < 10000; i++) 
    s.innerText = i + " times"; 

更新结束,但我想观察每个中间步骤。解决这个问题的普遍反应是使用setTimeout,但是,有三个方面的原因是不可接受的:在页面上

  • 还有其他的按钮/链接等,而重要的是,这些都不可以点击而循环运行。
  • 在循环结束时,我想显示一个弹出窗口,如果超时触发,则标准弹出窗口阻止程序将隐藏它,因为它不再由用户启动。
  • 如果用户在循环运行时单击,我希望该点击被缓存直到循环完成,而不是通过循环中途开启。

有没有办法强制浏览器重画?

+0

>在循环结束时,我想显示一个弹出窗口,如果超时被触发,标准弹出窗口阻止程序将隐藏它,因为它不再由用户启动。 我不太确定这一点。我从来没有使用settimeout window.open弹出窗口,但几乎每次浏览器停止弹出 – Sebas

+0

如果弹出窗口直接响应用户操作(即单击)打开,那么它通常是允许的。如果您是以其他方式回应而启动它,那么通常会被禁止。 –

+3

*“有没有办法强制浏览器重画?”*我不这么认为。 'setTimeout'的第一个和第三个问题似乎是可以解决的。不确定第二个。 – 2012-06-01 20:26:59

回答

1

虽然恐怕这是您唯一的解决方案,因为不可重绘的中间环节作为浏览器渲染速度提升的一个重要指标非常重要。

也许你可以在那些你不想触发的点击事件中管理一个缓冲区标志吗?或者更好地说一个不要缓冲我旗...

我希望它帮助,最好的问候。