getBoundingClientRect().width和clientWidth都能获取设备宽度,他们有什么区别吗?

发布于 2022-09-04 14:08:09 字数 208 浏览 12 评论 0

今天看flexible.js的代码,发现获取宽度使用getBoundingClientRect而不是直接clientWidth,请问这两个方法获取宽度有什么区别吗?

document.documentElement.clientWidth
document.documentElement.getBoundingClientRect().width;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄凉少年不暖心 2022-09-11 14:08:09

getBoundingClientRect().width获取到的其实是父级的右边距离浏览器原点(0,0)左边距离浏览器原点(0,0)的距离,即父级的宽度+2padding+2border。
此时的clientWidth等于父级的宽度+2*padding,不包括边框的宽度。
当不隐藏子级内容,即overflow为auto时,前者的宽度依然为这个数字,因为父级并没有改编盒模型。后者的宽度为上述得到的宽度-滚动条的宽度(17px);例子如下:

    <div id="divParent" style="background-color: #aaa; padding:8px; border:solid 7px #000; height:200px; width:500px; overflow:hidden;">
        <div id="divDisplay" style="background-color: #0f0; margin: 30px; padding: 10px;
            height: 400px; width: 600px; border: solid 3px #f00;">
        </div>
    </div>
    
    <script>
        var divP = document.getElementById('divParent');
        var divD = document.getElementById('divDisplay');

        var clientWidth = divP.clientWidth;
        var getWidth = divP.getBoundingClientRect().width;
        divD.innerHTML += 'clientWidth: ' + clientWidth + '<br/>';
        divD.innerHTML += 'getWidth: ' + getWidth + '<br/>';
    </script>

我没看过flexible.js,只是从原生的js上给你点东西,希望对你有用!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文