2010-05-20 26 views
1

我有一個179張縮略圖圖像列表,我試圖將一個jQuery lightbox工具應用於超鏈接的無序列表。jQuery預先準備好文件的事件

我現在的問題是,直到圖片下載完成後,jQuery並沒有發射,每張圖片的大小都在23K左右,不是那麼大,但是作爲一個組,這相當於大約4MB。

在頁面完全下載每個縮略圖之前的5秒鐘的IE(客戶端使用的主瀏覽器)上存在延遲,然後允許jQuery啓動。

我試過把jQuery文檔準備好的事件放在各種地方沒有成功,只能通過設置ul上的css來隱藏使用display:none,然後在應用燈箱後應用.show()

我希望有一種方法可以在所有內容下載之前觸發jQuery腳本?

乾杯

更新:因爲它代表我的代碼是:

$(document).ready(function(){ 
    $("li.eventPhoto a").lightBox(); 
}); 

但這個心不是在IE瀏覽器應用,直到所有圖像都加載。

回答

5

$(document).ready()將在DOM完成加載後立即執行(即在所有圖像完成下載之前,但只要所有頁面的html完成加載)。如...

$(document).ready(function(){ 
    // do someting as soon as the document is ready, 
    // possibly before the images are loaded 
}) ; 

如果你想所有的圖像都加載完成後做一些事情,那麼你就需要使用onload事件,像這樣......

$(window).bind('load', function() { 
    // Do something when the images have finished loading 
}); 

如果你想有一個腳本現在現在就可以執行了,它出現在html文檔中,然後不要使用任何「ready」函數。只是這樣做的權利有那麼...

<script> 
    // code that you want to execute as soon as the browsers finds this bit of your doc. 
    // note that you won't be able to access the DOM as it may not all be present 
</script> 
+0

如果文檔就緒事件在ASP.NET窗體內部或外部,這有什麼關係嗎? 試圖從我的通話周圍刪除文檔準備位,但沒有看到改變任何東西。 – 2010-05-20 11:29:55

+0

謝謝你的答覆,已經被玩弄,並認爲這可能是服用一點的時間來下載JS(由於圖像的數量,燈箱JS可能有點太沉重)。 謝謝大家。 我會將此標記爲正確答案,併爲您提供所有時間。 乾杯 – 2010-05-20 12:09:17

+0

@Luke,你可以把'$(文件)。就緒()'調用在頁面的任何地方(雖然他們必須被包含的jQuery後)。你也可以包含儘可能多的'$(document).ready()'調用。當完整的html頁面完成下載時,它們全部保存並執行。 jQuery文檔解釋得非常好:http://api.jquery.com/ready/ – 2010-05-20 13:49:45

4

我會嘗試lazyload-plugin這樣的頁面可以被完全加載所有的圖像之前進行發射的$(document).ready()被加載,你可以以後不是下載的所有圖片。

1

正如rikh和Jens所提到的,您可以在加載縮略圖之前使用ready()事件觸發代碼。然而,你提到IE,這意味着你可能已經在使用這個事件,但在瀏覽器中失敗(它可能,因爲IE6/7沒有真正的事件和jQuery要麼嘗試通過其他方式檢測它或使用負載,I不知道)。

如果出現這種情況,請在忘記$(document).load()/ $(document).ready()事件的情況下,在最後一個鏈接被渲染後插入代碼到html中。

喜歡的東西:

<ul> 
    (...) // List of thumbnails and links 
</ul> 

<script type="text/javascript"> 
    // Attach lightbox to links 
</script> 

這樣,瀏覽器會連接相關就像HTML鏈接已經建立,不必等待DOM/HTML,纔開始加載收藏夾事件加工。 要記住的重要一點是,在HTML中,在標記之前,腳本所需的所有標記和元素必須已經呈現,並且必須已經引用必要的js庫。