所以我在我正在工作的网站上拥有此脚本,该脚本基本上是从数据库加载图像并将其放入div中。加载完所有图像后,我希望它触发一个滚动插件(smoothdivscroll)。但是我找不到使最后一部分起作用的方法。
这里是代码:
$.get("pages/photosgigs.php", { gig: $(this).attr("id")}, function(data) {
$('#makeMeScrollableGall').html(data)
$(window).load( function() {
$("#makeMeScrollableGall").smoothDivScroll();
resize();
});
});
photosgigs.php上的php脚本返回一个简单的<img class="photo" src="..." />
。我也用$("img.photo").load()
进行了尝试,尽管我知道它会在加载第一个图像时触发,但也无法正常工作。也尝试过$("#makeMeScrollableGall").load()
,也不起作用。
我开始认为我的问题在于我的图像是动态加载的。这是正确的吗?
还是我只是做错了什么?
首先,window.onload
很少是您想要的。当页面first加载时,onload
事件将触发once,它将不会再次触发...因此,当前,您正在为已触发并且不会触发的事件添加一个侦听器。而是在图像和上使用load
事件,以检查是否尚未触发(如果从缓存加载,则可能触发)。
这些更改如下所示:
$.get("pages/photosgigs.php", { gig: $(this).attr("id") }, function(data) {
//load data, find the photo we just added
$('#makeMeScrollableGall').html(data).find('img.photo').load(function() {
//when the load event fires for the image, run this
$("#makeMeScrollableGall").smoothDivScroll();
resize();
//loop through the loaded images (just one) but this is easier
}).each(function() {
//if the image was already loaded (cached) fire the load event above
if(this.complete) $(this).load();
});
});
[.complete
正在检查图像是否已加载,是否正在触发我们的事件处理程序,只需通过调用.load()
(.load()
的快捷键)进行绑定即可。