今天来聊一下两个类似的方法,它们就是:getBoundingClientRect()、getClientRects()。javascript
只见它们俩手拉手地登上了舞台,一个鞠躬,便开始口若悬河起来。java
“我来了,你看到我了,固然看到我咯,彪悍一个。”数组
“想知道怎么驾驭我吗?你想吗?像这样。”code
let rectList = document.getElementById('box').getClientRects(); /* 我返回的是一个包含一个或多个 DOMRect 对象的数组; 哈哈,这也是我稍微彪悍的缘由。 */
“在这里,我要粗略讲下什么是DOMRect对象(也是ClientRect对象、TextRectangle对象)。它呢,是一个盒子的边界矩形,简单看就是一个包着内容的盒子。”对象
“在我这里,全部规则我说了算。”blog
“块级元素我认为就是一个总体,因此在我这里,块级元素直接返回盒子模型的矩形范围。”ip
“不过呢,行内元素会产生自动换行这类看似分割总体的歧义,因此,我会把行内元素根据它换行划分红多个盒子边界矩形。这也是我和个人兄弟——getBoundingClientRect的区别。也是我对我返回类型的一种解释吧。”get
“每一个盒子边界矩形都有些什么?能带给咱们什么惊喜?哈哈,就让个人兄弟给大家说吧!我累了,坐会。”io
“终于到我了,想必等好久了吧,那我再等我清下嗓子,咳咳。开始咯!”function
“你要像这样子使用我,并且我对块级元素和行内元素是一视同仁的,可能我心比较大吧。”
let rectObject = document.getElementById('box').getBoundingClientRect(); /* 返回的是一个 DOMRect(或者叫 TextRectangle、ClientRect) 对象: [object DOMRect] { bottom: 208, height: 200, left: 8, right: 208, top: 8, width: 200, x: 8, y: 8, toJSON: function toJSON() {...} } */
“忘了最重要的自我介绍了,那仍是要说下的。”
“我是会返回元素的大小和它相对于视窗的位置,即,除了大小(width和height)其他的属性都是相对于视窗的左上角位置而言的,因此当存在滚动时,位置有多是负值,还有一点,这些都是只读属性。”
图例:
图上白色区域的便是视窗区域,左上角为0,0点。
只见幕布徐徐落下,一胖一瘦相扶走下舞台。
题外话,第一次这么写,感受很乱,说错的但愿你们指出来,我会虚心改进。谢谢。