我的一頁頁面中有9000個元素,需要經常重建,這可能需要幾秒鐘的時間。DOM更新後跟一個大循環不能及時呈現
所以,我做了一個小覆蓋小部件,覆蓋與Loading..
元素。信息。在我重建元素之前,我打電話給showOverlay()
,在循環之後我打電話給hideOverlay()
。
但是,在顯示我的Loading...
消息之前,循環會鎖定頁面,因此它永遠不會顯示。
function rebuild() {
showOverlay(); // The overlay never appears...
for (var i=0;i<9000;i++) {
// append element...
}
hideOverlay();
}
如何等待疊加層在我開始循環之前呈現?
爲1毫秒保證夠嗎? – 2012-02-28 22:32:24
@TonyR它不應該花很長時間,但我會把它設置爲10. IIRC谷歌瀏覽器將只使用至少10個,所以如果你有它在1ms它仍然會等待。 10毫秒。這仍然會凍結頁面。 – 2012-02-28 22:36:16
不需要多長時間 - 1ms可能夠用了。重要的部分是強制類似於「線程切換」的東西(即使它不是以普遍接受的方式表示的線程切換) - brwoser將放置JS任務並啓動DOM任務,超時將不會打斷,但被延遲。 – 2012-02-28 22:41:37