你不需要将其添加到文档中来测量其大小,但必须等待它至少部分加载。如果你需要同时对可能超过一张图片进行操作,并在尺寸可用时立即调用回调函数,可以使用我的imageloader模块:
var ImageLoader = {
maxChecks: 1000,
list: [],
intervalHandle : null,
loadImage : function (callback, url) {
var img = new Image ();
img.src = url;
if (img.width && img.height) {
callback (mg.width, img.height, url, 0);
}
else {
var obj = {image: img, url: url, callback: callback, checks: 1};
var i;
for (i=0; i < this.list.length; i++) {
if (this.list[i] == null)
break;
}
this.list[i] = obj;
if (!this.intervalHandle)
this.intervalHandle = setInterval(this.interval, 30);
}
},
interval : function () {
var count = 0;
var list = ImageLoader.list, item;
for (var i=0; i<list.length; i++) {
item = list[i];
if (item != null) {
if (item.image.width && item.image.height) {
item.callback (item.image.width, item.image.height, item.url, item.checks);
ImageLoader.list[i] = null;
}
else if (item.checks > ImageLoader.maxChecks) {
item.callback (0, 0, item.url, item.checks);
ImageLoader.list[i] = null;
}
else {
count++;
item.checks++;
}
}
}
if (count == 0) {
ImageLoader.list = [];
clearInterval (ImageLoader.intervalHandle);
delete ImageLoader.intervalHandle;
}
}
};
onload
事件有一些常见的注意事项:在某些浏览器中,当图片被缓存时,该事件不会触发。(请参见此处的“使用load
事件时与图片有关的注意事项”) - Pekka