奇怪的问题你知道为什么这段代码吗:
var img = new Image();
img.src = 'images/img1.jpg';
$(img).on('load', function() {
alert($(this).width());
});
在火狐,Chrome中给出0,但在IE9中给出正确的值?如何在所有浏览器中获得适当的值?使用 jQuery 1.8.2<</p>
jsBin demo
var img = new Image();
img.src = 'images/img1.jpg';
$(img).on('load', function() {
alert(this.width);
});
或者使用纯 JS:
var img = new Image();
img.src = 'images/img1.jpg';
img.onload = function() {
alert(this.width);
};
直到您将image
附加到 dom .width()
返回0
var img = new Image();
img.src = 'http://jsfiddle.net/img/logo.png';
$(img).on('load', function() {
console.log(this.width); // 160
console.log($(this).context.width); // 160
console.log($(this).width()); // 0
$('body').append($(this));
console.log($(this).width()); // 160
});
检查这个。
jQuery文档http://api.jquery.com/load-event/
与图像一起使用时加载事件的注意事项: 开发人员尝试使用 .load() 快捷方式解决的常见挑战 是当图像(或图像集合)具有 完全加载。有几个已知的警告应该 请注意。这些是:
1.It 不能始终如一地跨浏览器工作,也不能可靠地跨浏览器工作 2. 如果图像 src 设置为与以前相同的 src,则在 WebKit 中无法正确触发 3.它没有正确地冒泡DOM树 4.可以停止触发已经存在于浏览器缓存中的图像
如果您查看文档中的注释,许多人都有同样的问题,因为 webkit 中没有触发加载事件,通常是在之前将 src 设置为相同时......也许您想设置占位符图像,然后更改 SRC 属性。
jQuery确定对象维度的方式是通过检查style
属性(afaik);由于图像永远不会被添加到DOM中,所以它不会知道这一点。
话虽如此,我看不出为什么你需要jQuery在这里:
var img = new Image();
img.onload = function() {
alert(this.width);
}
img.src = 'http://example.org/path/to/image.jpg';
要使用 jQuery 设置维度,您可以使用以下内容:
$(this)
.width(this.width)
.height(this.height);
不知道为什么需要它,因为在渲染时浏览器已经知道图像有多大,这与向 DOM 添加<img />
不同
顺便说一句,这些语句的顺序很重要;您应该在设置 .src
属性之前注册 load 处理程序,否则如果浏览器缓存了图像,您可能会错过 load 事件。