我有一些處理過程需要幾秒鐘的時間,所以我想在處理過程中添加一個可視化指示器。瀏覽器渲染和javascript執行的同步/異步性質
.processing
{
background-color: #ff0000;
}
<div id="mydiv">
Processing
</div>
腳本:
$("#mydiv").addClass("processing");
// Do some long running processing
$("#mydiv").removeClass("processing");
我天真地以爲類將應用於div和用戶界面將被更新。但是,在瀏覽器中運行(至少在Firefox中),div永遠不會突出顯示。有人可以向我解釋爲什麼我的div不會突出顯示嗎?該類被添加,處理髮生,然後該類被刪除;用戶界面不會在兩者之間更新,用戶也不會看到紅色背景。
我知道JS是單線程的,但我總是推測瀏覽器呈現將在DOM更新時同步運行。我的假設是否不正確?
更重要的是,達到這種效果的推薦方法是什麼?我是否必須使用setTimeout
來使緩慢處理異步並使用回調工作?必須有更好的方法,因爲我在這裏確實不需要異步行爲;我只想要刷新UI。
編輯:
的jsfiddle:http://jsfiddle.net/SE8wD/5/
(請注意,你可能需要調整循環迭代的次數,給你自己的電腦上合理的延遲)
我相信這樣的改變會直接導致DOM,但瀏覽器會等待,直到JavaScript執行「空閒」,然後再進行重新繪製。 – pimvdb 2012-03-23 10:58:48
「做一些長時間運行的處理」有一些異步調用? (ajax,settimeout等) – 2012-03-23 11:00:31
我不能真正看到你的代碼出錯了,因爲它看起來很好,你已經發布。也許在你的外部css文件中有一些'!important'。你確定增加了班級(你是否通過螢火蟲檢查過),這個過程真的需要很長時間嗎?可能它發生得太快 – 2012-03-23 11:00:44