当前位置:首页 > 前端 > 正文内容

getBoundingClientRect

3个月前 (08-08)前端

getBoundingClientRect() 方法返回元素的大小及其相对于视口的位置。

API

let DOMRect = object.getBoundingClientRect()

它的返回值是一个 DOMRect 对象,这个对象是由该元素的 getClientRects() 方法返回的一组矩形的集合,就是该元素的 CSS 边框大小。返回的结果是包含完整元素的最小矩形,并且拥有 left, top, right, bottom, x, y, width, 和 height 这几个以像素为单位的只读属性用于描述整个边框。除了 width 和 height 以外的属性是相对于视图窗口的左上角来计算的。


应用场景

1、获取 dom 元素相对于网页左上角定位的距离

以前的写法是通过 offsetParent 找到元素到定位父级元素,直至递归到顶级元素 body 或 html。

// 获取dom元素相对于网页左上角定位的距离
function offset(el) {
  var top = 0
  var left = 0
  do {
    top += el.offsetTop
    left += el.offsetLeft
  } while ((el = el.offsetParent)) // 存在兼容性问题,需要兼容
  return {
    top: top,
    left: left
  }
}

var odiv = document.getElementsByClassName('markdown-body')
offset(a[0]) // {top: 271, left: 136}

现在根据 getBoundingClientRect 这个 api,可以写成这样:

var positionX = this.getBoundingClientRect().left + document.documentElement.scrollLeft
var positionY = this.getBoundingClientRect().top + document.documentElement.scrollTop

2、判断元素是否在可视区域内

function isElView(el) {
  var top = el.getBoundingClientRect().top // 元素顶端到可见区域顶端的距离
  var bottom = el.getBoundingClientRect().bottom // 元素底部端到可见区域顶端的距离
  var se = document.documentElement.clientHeight // 浏览器可见区域高度。
  if (top < se && bottom > 0) {
    return true
  } else if (top >= se || bottom <= 0) {
    // 不可见
  }
  return false
}


手机扫描二维码访问

扫描二维码推送至手机访问。

版权声明:本文由Magic发布,如需转载请注明出处。

本文链接:http://maguochang.com/?id=17

分享给朋友:

“getBoundingClientRect” 的相关文章

css控制 只显示一行 强制不换行 超出用...表示

只显示一行,超出用...表示<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"&nbs...

真正可用的CSS文字两端对齐

真正可用的CSS文字两端对齐

最近在工作项目中接触到Web界面设计的问题,要实现文字两端对齐的效果。在网上搜索了一下,差不多都是互相转帖,用的都是类似的技巧:text-align:justify; text-justify:inter-ideograph;但问题是,我怎么就看不到效果呢?无论是英文还是中文,在IE和chrome...

Lodop打印控件打印机可打区域的影响 设置纸张边缘为基点

Lodop打印控件打印机可打区域的影响 设置纸张边缘为基点

由于打印机千差万别,打印开发也要注意针对客户各种打印机进行处理,Lodop提供了打印维护(PRINT_SETUP)可针对每个客户端进行微调,保存结果保存在客户端本地,对其他访问网站的客户没有影响。由于打印机的限制,有些打印机不能打印某些规格的纸张,或打印区域有限制,不是所有打印机都支持自定义纸张,也...

js判断对象还是数组

1.对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的var a=[]; var b={}; Array.isArray(a);//true Array.isArray(b)//false2.调用toString...

js中小数四舍五入和浮点数的研究

js中小数四舍五入和浮点数的研究

toFixed可以实现小数四舍五入,但有时候却不正确,1.335.toFixed(2)=1.33,使用提升倍数然后除以倍数有时候也有问题,35.41 * 100 = 3540.9999999999995,本文讲怎么解决这些。 JS中浮点数精度问题 最近在做项目的时候,涉及到商品价格的计算,经常会出现...