2012-06-01 44 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

雖然恐怕這是您唯一的解決方案,因爲不可重繪的中間環節作爲瀏覽器渲染速度提升的一個重要指標非常重要。

也許你可以在那些你不想觸發的點擊事件中管理一個緩衝區標誌嗎?或者更好地說一個不要緩衝我旗...

我希望它幫助,最好的問候。