【发布时间】:2011-09-28 08:15:19
【问题描述】:
我已经阅读了有关在图像完全加载后获取图像尺寸的各种方法,但是否有可能在图像刚开始加载后获取其尺寸?
我没有通过搜索找到太多相关信息(这让我相信这是不可能的),但事实上浏览器(在我的情况下为 Firefox)显示了我在新标签页中打开的任何图像的尺寸刚开始加载图像后的标题让我希望确实有一种方法,我只是错过了找到它的正确关键字。
【问题讨论】:
标签: javascript image loading dimensions
我已经阅读了有关在图像完全加载后获取图像尺寸的各种方法,但是否有可能在图像刚开始加载后获取其尺寸?
我没有通过搜索找到太多相关信息(这让我相信这是不可能的),但事实上浏览器(在我的情况下为 Firefox)显示了我在新标签页中打开的任何图像的尺寸刚开始加载图像后的标题让我希望确实有一种方法,我只是错过了找到它的正确关键字。
【问题讨论】:
标签: javascript image loading dimensions
您是对的,可以在图像完全加载之前获得图像尺寸。
这里有一个解决方案 (demo):
var img = document.createElement('img');
img.src = 'some-image.jpg';
var poll = setInterval(function () {
if (img.naturalWidth) {
clearInterval(poll);
console.log(img.naturalWidth, img.naturalHeight);
}
}, 10);
img.onload = function () { console.log('Fully loaded'); }
【讨论】:
naturalWidth 和naturalHeight 都获得非零值时立即调用clearInterval 似乎效率更高,就像aleemb 的解决方案是如何做到的(而不是等待直到加载图像)。
以下代码在可用时立即返回宽度/高度。用于测试将图像源中的 abc123 更改为任何随机字符串以防止缓存。
还有一个JSFiddle Demo。
<div id="info"></div>
<img id="image" src="https://upload.wikimedia.org/wikipedia/commons/d/da/Island_Archway,_Great_Ocean_Rd,_Victoria,_Australia_-_Nov_08.jpg?abc123">
<script>
getImageSize($('#image'), function(width, height) {
$('#info').text(width + ',' + height);
});
function getImageSize(img, callback) {
var $img = $(img);
var wait = setInterval(function() {
var w = $img[0].naturalWidth,
h = $img[0].naturalHeight;
if (w && h) {
clearInterval(wait);
callback.apply(this, [w, h]);
}
}, 30);
}
</script>
【讨论】:
一种方法是使用 HEAD 请求,它只要求响应的 HTTP 标头。我知道在 HEAD 响应中,包括身体的大小。但我不知道是否有任何可用于图像大小的东西。
【讨论】:
same-origin 请求中执行此操作,或者如果您专门设置服务器以允许 @987654322 @.