getBoundingClientRect属性研究

getBoundingClientRect属性研究

概念

getBoundingClientRect 返回 width、height和下图中的6个属性

请添加图片描述

实测总结:

抓住一个核心点,就是height、width的值:

  • box-sizing 是 content-box时,width和height = 内容+border+padding
  • box-sizing是 border-box时, width和height = 我们设置的width、height

所以:

  • top、left很好算,就是元素到左上角原点的距离
  • bottom、right说白了就是在 top/left的基础上 加上 上面说的 height/width
  • 另外一点需要注意的是:当页面有滚动条时,随着滚动条左右上下滚动,top、bottom、left、right都会跟着变;比如原来的top值是0,页面向上滚动了100px,那么top值就成了 -100

代码实测

box-sizing:content-box时

请添加图片描述

box-sizing:border-box时

请添加图片描述

有滚动条时

请添加图片描述

注意:

在看源码时,经常看到兼容性IE低版本的写法,了解即可,比如看popper.js源码时:

    /**
     * Get bounding client rect of given element
     * @function
     * @ignore
     * @param {HTMLElement} element
     * @return {Object} client rect
     */
    function getBoundingClientRect(element) {
        var rect = element.getBoundingClientRect();

        // whether the IE version is lower than 11
        var isIE = navigator.userAgent.indexOf("MSIE") != -1;

        // fix ie document bounding top always 0 bug
        var rectTop = isIE && element.tagName === 'HTML'
            ? -element.scrollTop
            : rect.top;

        return {
            left: rect.left,
            top: rectTop,
            right: rect.right,
            bottom: rect.bottom,
            width: rect.right - rect.left,
            height: rect.bottom - rectTop
        };
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值