为了账号安全,请及时绑定邮箱和手机立即绑定

getBoundingClientRect().width和clientWidth都能获取设备宽度

getBoundingClientRect().width和clientWidth都能获取设备宽度

森栏 2018-10-12 14:15:12
今天看flexible.js的代码,发现获取宽度使用getBoundingClientRect而不是直接clientWidth,请问这两个方法获取宽度有什么区别吗?document.documentElement.clientWidthdocument.documentElement.getBoundingClientRect().width;
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

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上给你点东西,希望对你有用!


查看完整回答
反对 回复 2018-11-23
  • 1 回答
  • 0 关注
  • 1224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信