我正在處理一個非常複雜的.aspx頁面,這是一個完全控制(Telerik,Ajax等),當頁面展開,摺疊,顯示,隱藏等被加載。由於此渲染髮生在客戶端,並可能根據用戶機器規格花費不同時間長度,有沒有辦法檢測何時發生了所有(或某種)渲染(jQuery?),以便我可以針對特定元素,知道他們完全呈現?當所有的HTML頁面呈現已經發生時檢測
回答
JavaScript是單線程的。傳遞給setTimeout
的時間是最小值,但不是最大值,所以如果你傳遞類似10(ms)的東西,你基本上是說「在所有當前運行的代碼完成後執行此代碼。」
所以,如果所有的控件使用$(document).ready()
做自己的事情,你需要的是:傳遞給$(document).ready
的所有功能都運行後
$(document).ready(function() {
setTimeout(function() {
doStuff();
},10);
});
doStuff
將被調用。但是,這並非萬無一失。如果控件有自己的方式來檢測文檔是否已加載,或者自己做了setTimeout()
,那麼您遇到了麻煩。問題是JavaScript不保證setTimeout
的執行順序。有時您的代碼可能會最後運行,有時可能會在用於動畫的setTimeout
之前運行。
最後一個想法:如果所有動畫都是使用jQuery完成的,那麼效果將在單個隊列中運行。在doStuff
中,您可以添加某種類型的動畫with a callback,並且可以合理確定該回調會最後運行。
我想你需要的文檔是:
「然後我就可以作用於特定的元素,知道他們在完全呈現?」
您可以使用load方法(上面鏈接)來附加到任何元素。所以,如果你曾與「是以lastElement」的ID的DIV,你可以寫
$('div#lastElement).load(runThisFunction);
你應該把你的代碼jQuery的$(文件)。就緒()函數中。這將確保在代碼運行之前加載所有元素。
http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
.ready在DOM準備就緒時執行,如果渲染完成,則不執行!如果你想等待頁面完成渲染,那麼你需要.load。 – Mike 2010-01-11 16:40:59
無論何時我需要等待多個事情做好準備才能繼續,我會創建一個具有true/false值的數組。頁面的每個必需部分都有一個事件,當它被調用時,將數組中的特定條目更新爲true。此外,它調用一個通用函數,如果數組中的所有值都爲真,則返回true,否則返回false。
如果該函數最終返回true,我將繼續執行。如果您必須等待AJAX調用結束,但不想使用async = true,那麼它特別有用。如果你想立刻開始加載多個事物而不是一個接一個地開始,這也很有用,因爲它們都將就緒狀態報告給同一個數組。
但它使用全局變量,所以你可能需要做一些優化。如果你對全局變量有怨氣,你可能不想這樣做。
- 1. Android Webview:檢測頁面已呈現
- 2. Backbone.js - 修改已經呈現的頁面
- 3. 角JS:檢測時,頁面內容已經完全呈現,並可見
- 4. 角空格頁面後已經呈現
- 5. HTML完成加載並在頁面上呈現時檢測
- 6. 當CSRF FAILURE發生時,建議呈現頁面的GET部分?
- 7. JS生成的頁面沒有完全呈現爲html時,刮
- 8. 角JS - 檢測當所有的$ HTTP()已經完成
- 9. 當UIPopoverController完成呈現時檢測UIImageViewcontroller
- 10. 的Javascript:檢測時,頁面已經被導航「回」到
- 11. 呈現大型HTML頁面
- 12. ASP.net MVC呈現html頁面
- 13. Angularjs沒有呈現給html頁面
- 14. angularjs接管已經服務器端呈現的頁面
- 15. window.print不適用於已經由document.write呈現的頁面
- 16. 嘗試呈現哪個已經呈現
- 17. NoReverseMatch當呈現頁面
- 18. 檢查時間戳來呈現是否已經3小時 - PHP
- 19. 如何檢測頁面上的所有jqGrids是否已加載?
- 20. 有時,使用jstl生成的html頁面不會完全呈現
- 21. 實時檢測iframe頁面已加載
- 22. 我怎麼知道什麼時候已經HTML完全呈現
- 23. 頁面呈現/加載所有組件時的事件
- 24. 當onLoadFinished觸發時,頁面未完全加載/呈現
- 25. 當檢測數據已經改變
- 26. 攔截爲Sitecore中的頁面呈現HTML /運行時HTML
- 27. 剃刀頁面(cshtml)呈現HTML標記沒有經典的顏色
- 28. 當頁面滾動時檢測
- 29. 當頁面上已經禁用鏈接
- 30. 檢測我的頁面呈現在Chrome應用
由於您是添加這些onload動作的人 - 您爲什麼不在動作結束時添加觸發器?或者可能會添加一些「輪詢」在onload期間更改的項目? – Dror 2010-01-11 15:23:43
你需要'document.ready()'後面的東西嗎? – naivists 2010-01-11 15:25:37
「渲染」在這裏可能有點模棱兩可。你想知道什麼時候所有的頁面元素都已經完成*動畫*(因爲沒有更好的術語)?也就是說,你是否想知道應該擴展的東西何時擴展,應該隱藏的東西是隱藏的等等? – 2010-01-11 15:28:28