2011-05-05 60 views
5

我试图用它们的load()方法得到一些图像的纵横比。

$('img').load(function(){ 
    alert(this.src); 
    alert($(this).width()); 
    setAspectRatio(this); 
}); 

(this.src)告诉我我期望听到什么。 ($(本).WIDTH())给了我0.1

我发现这个文档中的负载():

与图像

一个共同使用时加载事件的

注意事项挑战开发人员尝试使用.load()快捷方式来解决图像(或图像集合)完全加载时执行的功能。有几个已知的警告与此应该注意。它们是:

  • 这并不一致,也不可靠地工作,跨浏览器的
  • 它不正确的WebKit如果图像的src设置为相同的SRC像以前
  • 它不火正确地泡了DOM树
  • 可以停止火已经生活在浏览器的缓存图片

一对夫妇这些项目听起来有点含糊,我,但THES使用get()方法将图像添加到元素中,所以我最好的猜测是我的问题与此有关。

这似乎不是一个不寻常的情况,但谷歌不给我任何东西。这里有没有人遇到过这个?

+0

你为什么不能包括'width'和'height'你的''元素属性? “它不一致,也不可靠地跨浏览器”告诫几乎意味着“不要尝试这个”。 – 2011-05-05 04:47:15

+0

想想吧,我甚至没有考虑过。我更喜欢不需要额外标记的解决方案,但这肯定会起作用,这非常棒。谢谢! – Patrick 2011-05-05 04:59:18

+0

总是在图像中包含'width'和'heigh'属性,它整齐地消除了很多混淆,时间问题和其他问题。 – 2011-05-05 05:09:30

回答

1

您是否尝试过使用

$(window).load(function(){ 
    //initialize after images are loaded 
}); 

这不会触发,直至页面完成下来。然后,你可以抓住任何你想要的img,并使用你的脚本。

+0

不幸的是,由于图像通过get()进入页面,当窗口加载时它们不存在。 – Patrick 2011-05-05 05:36:59

0

This answer也涉及到这个问题。您的代码无法在缓存的图像上工作,因为当图像已被缓存时,加载事件通常在进行回调绑定之前触发。链接答案中的代码解决了这个问题。

1

尝试使用此

$('<img/>').load(function(){ }); 
0

你试过以下

$('img').load(function() { 
     alert(this.src); 
     alert($(this).width()); 
     setAspectRatio(this); }).delay(500);​