2010-05-20 61 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库。