我有一个179个缩略图的列表,我正在尝试将jQuery lightbox工具应用到一个无序的超链接列表中。
我的问题是,在图像下载完成之前,jQuery是不会启动的,每个图像本身大约是23K,不是很大,但作为一个整体,这相当于大约4MB。
在IE (客户端使用的主浏览器)上,在页面完全下载每个缩略图之前有5秒的延迟,然后允许jQuery触发。
我已经尝试在不同的地方放置jQuery文档就绪事件,但没有成功,并且只能通过设置ul上的css来隐藏在应用lightbox之后应用.show()
之前使用display:none
。
我希望有一种方法可以在所有内容都下载之前启动jQuery脚本?
干杯
更新:我现在的代码是:
$(document).ready(function(){
$("li.eventPhoto a").lightBox();
});
但这并不适用于IE,直到所有的图像都已加载。
发布于 2010-05-20 09:05:39
$(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文档中的时候,那么不要使用任何“就绪”函数。就这么做吧然后就会有..。
<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>
发布于 2010-05-20 09:08:04
我会尝试lazyload-plugin,这样页面就可以完全加载,并在所有图像加载之前触发$(document).ready()
,然后您就可以下载所有图像了。
发布于 2010-05-20 09:17:34
正如rikh和Jens所提到的,您可以在加载缩略图之前使用ready()事件来触发代码。但是,您提到了IE,这意味着您可能已经在使用此事件,但在浏览器中失败(它可能,因为IE6/7并没有真正的事件,而jQuery要么尝试通过其他方法检测它,要么使用load,我不知道)。
如果是这种情况,请忘记$(document).load()/$(document).ready()事件,并在呈现最后一个链接之后在html中插入代码。
类似于:
<ul>
(...) // List of thumbnails and links
</ul>
<script type="text/javascript">
// Attach lightbox to links
</script>
这样,浏览器就会像创建HTML链接一样附加与lightbox相关的事件,而不必等待dom/html加载后才开始工作。需要记住的重要一点是,在HTML中,在标记之前,必须呈现脚本所需的所有标记和元素,并且必须引用必要的js库。
https://stackoverflow.com/questions/2872281
复制相似问题