如何获取自适应宽度的图片尺寸

控制台与 console.log 函数打印不一致

我在HTML中添加了一个图片,样式只设置了高度,这样图片的宽度就会自适应,这样不会图片变形。
但是我想要获得这个图片真实的宽度(自适应后的宽度),这该如何获取?于是尝试使用 img.offsetWidth 或者 img.getBoundingClientRect 以及 window.getComputedStyle(img,null).width 来获取。结果打印的值都是 0。难道获取不了没有设置的图片宽度吗?

<style>
    img{
        height: 300px;
    }
</style>
<body>

    <img src='./01.jpg' />

    <script>

        const img = document.querySelector('img');

        console.log(img.offsetWidth);       // 0
        console.log(img.getBoundingClientRect().width);     // 0
        console.log(window.getComputedStyle(img,null).width);   // 0px
    
    </script>
    
</body>

但是在浏览器控制台(我使用了 Chrome 和 fireFox)去可以获取到宽度,这是为什么?
图片描述

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 4k
3 个回答

你的图片是需要时间加载的,改成下面试试,再看看结果吧,希望帮到你。

<style>
    img {
        height: 300px;
    }
</style>

<body>
    <img onload="load()" src='https://static.segmentfault.com/sponsor/20190830.png' />
    <script>
        const load = () => {
            const img = document.querySelector('img');
            console.log(img.offsetWidth);       
            console.log(img.getBoundingClientRect().width);     
            console.log(window.getComputedStyle(img, null).width);   
        }
        setTimeout(() => {
            const img = document.querySelector('img');
            console.log(img.offsetWidth);       
            console.log(img.getBoundingClientRect().width);     
            console.log(window.getComputedStyle(img, null).width);   
        }, 1000)
    </script>
</body>

您在内联脚本中获取元素打印其宽度时,图片都没下载下来,更别说渲染了,这时候当然获取不到浏览器布局计算后的宽度。

img.onload = function () {
    // 在加载完成后打印看看
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题