前端好用API之getBoundingClientRect

博客 动态
0 190
羽尘
羽尘 2022-03-07 20:56:15
悬赏:0 积分 收藏

前端好用API之getBoundingClientRect

前情

在前端开发需求中,经常需要获取元素的尺寸位置相关的属性,以往的做法是调用不同api获取相关属性的。

getBoundingClientRect介绍

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

标准盒子模型:元素的尺寸等于width/height + padding + border-width的总和。如果box-sizing: border-box,则元素的的尺寸等于 width/height。

topleftrightbottom属性是使用对象的其他属性的值来计算获得的,Object.keys()查找时将失败,Object.assign()无法复制返回的属性

调用方式:

domRect = element.getBoundingClientRect();

domRect对象介绍

domRect这个对象是由该元素的 getClientRects()方法返回的一组矩形的集合
left元素左边距离浏览器可视窗左边的距离
right元素右边距离浏览器视可视窗左边的距离
top元素顶边距离浏览器视可视窗顶边的距离
bottom元素底边距离浏览器视可视窗顶边的距离
width元素自身的宽
height元素自身的高
x元素左边距离浏览器可视窗左边的距离
y元素顶边距离浏览器可视窗顶边的距离

考虑到兼容性问题,尽量仅使用 lefttopright, 和 bottom属性是最安全的

使用示例

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <meta name="viewport" content="width=device-width">  <title>JS Bin</title>	<style>		*{		  padding: 0;		  margin: 0;		}		.container{		  width: 300px;		  height: 300px;		  overflow:auto;		}		.item{		  width: 600px;		  height: 60px;		  text-align: left;		  line-height: 60px;		  margin: 60px 0 0 60px;		  color: white;		  background-color: blue;		}		.tips{		  padding: 10px;		}		.rect_detail{		  padding: 10px;		  color: green;		}	</style></head><body>	<div >    <div >DOM0</div>    <div >DOM1</div>    <div >DOM2</div>    <div >DOM3</div>  </div>  <p >拖动滚动条查看值变化:</p>  <div >    DOM2元素:  </div>	<script>		var doms = document.querySelectorAll('.item');		var container = document.querySelector('.container');		var result = document.querySelector('.rect_detail');				container.addEventListener('scroll', function() {		  var donRect = doms[2].getBoundingClientRect();		  result.innerHTML = "DOM2元素:<br />" +		  "left:"+donRect.left + "<br />" +		  "right:"+donRect.right + "<br />" +		  "top:"+donRect.top + "<br />" +		  "bottom:"+donRect.bottom + "<br />" +		  "width:"+donRect.width + "<br />" +		  "height:"+donRect.height + "<br />" +		  "x:"+donRect.x + "<br />" +		  "y:"+donRect.y;		}, false);	</script></body></html>

演示地址:https://jsbin.com/wozabey/1/edit?html,css,js,output

posted @ 2022-03-07 20:39 !win ! 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员