我需要使用动态创建的图像标签来获取图像的尺寸。有用。但仅当我不将图像添加到 DOM 时才使用 attr('width')。否则,返回的维度为零。为什么?:)
this.img = $('<img/>', {'src': e.url} ); // generate image
this.img.appendTo('body'); // add to DOM
this.img.load(function(self){return function(){ // when loaded call function
console.log(self.img.attr('src'));
console.log(self.img.attr('width'));
console.log(self.img.width());
console.log(self.img.css('width'));
}; }(this) ); // pass object via closure
所以我生成图像,将其添加到 DOM 并定义一个处理函数,以便在加载图像时调用。我正在使用闭包向它传递对原始对象的引用,在闭包中称为“self”。我正在转储图像的 URL 以确保引用是正确的。输出是:
pic.jpg
0
0
0px
现在这是奇怪的事情:如果我删除上面的第二行(appendTo),那么它会突然起作用,但仅适用于 attr('width'):
pic.jpg
1024
0
0px
这种行为对我来说没有任何意义。我希望在上述所有六种情况下都能获得实际的图像尺寸。我现在知道如何解决这个问题,但我想了解它为什么会发生。它是一个错误吗?还是有一些合乎逻辑的原因?
以上结果适用于 Safari。我刚刚用 Chrome 进行了测试,在第一个示例中我得到了所有正确的值,但在第二个示例中仍然是两个零。很奇怪。