在图像完全加载之前使用Javascript获取图像尺寸

use*_*591 33 javascript image loading dimensions

我已经了解了图像完全加载后获取图像尺寸的各种方法,但是一旦刚开始加载,是否可以获得任何图像的尺寸?

我没有通过搜索找到太多(这让我相信它不可能),但浏览器(在我的情况下是Firefox)显示我在标题后面的新标签中打开的任何图像的尺寸它刚开始加载图像让我希望实际上有一种方法,我只是错过了正确的关键字来找到它.

kat*_*ugh 43

你是对的,可以在完全加载之前获得图像尺寸.

这是一个解决方案(演示):

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'); }
Run Code Online (Sandbox Code Playgroud)

  • 知道这很酷.我要添加的一件事是,如果img在图像标签或CSS中设置了高度或宽度,那么您的方法只返回该值,而不是图像的自然大小.某些浏览器支持naturalWidth和naturalSize属性.你可以在这个小提琴的模型中看到这里http://jsfiddle.net/jfriend00/rQwD4/ (3认同)
  • 如果你为`naturalWidth`和`naturalHeight`得到一个非零值就调用`clearInterval`似乎更有效,就像aleemb的解决方案一样(而不是等到图像加载). (2认同)

ale*_*emb 11

以下代码在可用时立即返回宽度/高度.用于测试将abc123图像源更改为任何随机字符串以防止缓存.

还有一个JSFiddle演示.

<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>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的jQuery替代方案,但不应该是接受的答案,因为它增加了OP不需要的依赖. (8认同)