2010-10-31 19 views
1

所以我有一个网站,我的工作,基本上是从数据库加载图像,并把它们放在一个div这个脚本。当所有的图像加载时,我希望它启动一个滚动插件(smoothdivscroll)。但是我找不到让最后一部分工作的方法。jQuery.load(function(){})事件在与.get()的协作中不起作用?

下面是代码:

$.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(),也不管用。

我开始思考我的问题在于我的图像动态加载的事实。它是否正确?

还是我只是作为一个普通的减速和我在做寄托都错了吗?

回答

1

首先,window.onload是很少会你想要的这里。 onload事件触发一旦当页面第一次加载时,它不会再次触发...所以目前你添加一个侦听器的事件已被触发,不会再次触发。相反,使用图像检查它尚未解雇(它可能有,如果它从缓存中装载)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(); 
    }); 
}); 

如果图像已经加载,如果是则触发事件处理器只是通过调用.load()(快捷键.trigger('load"))绑定的.complete正在检查。

+0

谢谢,工程就像一个魅力。有什么方法可以知道最后一张图片何时加载? – scipicore 2010-10-31 10:56:26

+0

是的,但我如何在加载图像时获得长度?我现在看到的方式是:从服务器获取1个图像 - 消防加载事件 - 从服务器获取1个图像 - 消防处理。我如何事先知道我加载了多少图像? – scipicore 2010-10-31 11:12:00

+0

@scipicore - 你不......这就是'.length'检查的目的。我认为一个完整的例子会更清晰:http://www.jsfiddle.net/nick_craver/QV9RS/这有帮助吗? :) – 2010-10-31 11:16:09