聊聊 getClientRects 和 getBoundingClientRect 方法
开始表演
今天来聊一下两个相似的方法,它们就是:getBoundingClientRect()、getClientRects()。
只见它们俩手拉手地登上了舞台,一个鞠躬,便开始滔滔不绝起来。
自述
getClientRects()
“我来了,你看到我了,当然看到我咯,彪悍一个。”
“想知道怎么驾驭我吗?你想吗?像这样。”
let rectList = document.getElementById('box').getClientRects();
/*
我返回的是一个包含一个或多个 DOMRect 对象的数组;
哈哈,这也是我稍微彪悍的原因。
*/
“在这里,我要粗略讲下什么是DOMRect对象(也是ClientRect对象、TextRectangle对象)。它呢,是一个盒子的边界矩形,简单看就是一个包着内容的盒子。”
“在我这里,所有规则我说了算。”
“块级元素我认为就是一个整体,所以在我这里,块级元素直接返回盒子模型的矩形范围。”
“不过呢,行内元素会产生自动换行这类看似分割整体的歧义,所以,我会把行内元素根据它换行划分成多个盒子边界矩形。这也是我和我的兄弟——getBoundingClientRect的区别。也是我对我返回类型的一种解释吧。”
“每个盒子边界矩形都有些什么?能带给我们什么惊喜?哈哈,就让我的兄弟给你们说吧!我累了,坐会。”
getBoundingClientRect()
“终于到我了,想必等很久了吧,那我再等我清下嗓子,咳咳。开始咯!”
“你要像这样子使用我,而且我对块级元素和行内元素是一视同仁的,可能我心比较大吧。”
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点。
落幕
只见幕布徐徐落下,一胖一瘦相扶走下舞台。
题外话,第一次这么写,感觉很乱,说错的希望大家指出来,我会虚心改进。谢谢。
参考
聊聊 getClientRects 和 getBoundingClientRect 方法的更多相关文章
- getBoundingClientRect方法获取元素在页面中的相对位置
获取元素位置可以用 offset 或 getBoundingClientRect,使用 offset 因为兼容性不好,比较麻烦,offset获取位置会形成"回溯".而 getBou ...
- getBoundingClientRect()方法
是在<javascript高级程序设计>中看到了这个方法.getBoundingClientRect在IE5中就有,但似乎不怎么引起我们注意. 返回值:它返回一个clientRect对象, ...
- JavaScript中getBoundingClientRect()方法详解
获取浏览器滚动的高度: scrollTop=document.documentElement.scrollTop || document.body.scrollTop getBoundingClien ...
- 利用getBoundingClientRect方法实现简洁的sticky组件
补充于2016-03-20: 本文实现有不足,不完美的地方,请在了解本文相关内容后,移步阅读<sticky组件的改进实现>了解更佳的实现. sticky组件,通常应用于导航条或者工具栏,当 ...
- 工作中的趣事:聊聊ref/out和方法参数的传递机制
0x00 前言 我在之前的游戏公司工作的时候,常常是作为一只埋头实现业务逻辑的码农.在工作之中不常有同事会对关于编程的话题进行交流,而工作之余也没有专门的时间进行技术分享.所以对我而言上家虽然是一家游 ...
- JavaScript中的getBoundingClientRect()方法
这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. getBoundClientRect()方法返回的对象中和CSS中所定义不 ...
- CSSOM之getboundingclientrect和getclientrects
TextRectangle 对于文本对象,W3C提供了一个 TextRectangle 对象,这个对象是对文本区域的一个解释. 对于 i,span,em等display 是inline的标签,在书写文 ...
- 获取元素位置信息:getBoundingClientRect
一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...
- WebBrowser常用属性方法介绍
WebBrowser 常用属性方法 ■■方法 ============================== ▲GoBack 相当于IE的"后退"按钮,使你在当前历史列表中后 ...
随机推荐
- 分析org.rpgpoet.Music.wizards.length
例子如下: package bazola; public class Gabriel { static int n = org.rpgpoet.Music.wizards.length; } pack ...
- Python -- Gui编程 -- Qt库的使用 -- 菜单与对话框
1.菜单 import sys from PyQt4 import QtCore, QtGui class MyWindow(QtGui.QMainWindow): def __init__(self ...
- ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
常规的日志收集方案中Client端都需要额外安装一个Agent来收集日志,例如logstash.filebeat等,额外的程序也就意味着环境的复杂,资源的占用,有没有一种方式是不需要额外安装程序就能实 ...
- Java直接用javac来编译带package的类
在没有package语句的java类, 我们可以直接使用: javac Test.java 就可以了, 如果Test.java中包含package语句,如:package abc; 编译后,是要求Te ...
- for循环的3个参数
1.最常用的方法是用来遍历集合 /** **第一个参数:表示循环的初始值,或初始条件,这里是i=0; **第二个参数:是循环的条件,这里是当i小于list的长度时; **第三个参数:每次循环要改变的操 ...
- SpringBoot入门 (四) 数据库访问之JdbcTemplate
本文记录在SpringBoot中使用JdbcTemplate访问数据库. 一 JDBC回顾 最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName( ...
- Node.js数据流Stream之Readable流和Writable流
一.前传 Stream在很多语言都会有,当然Node.js也不例外.数据流是可读.可写.或即可读又可写的内存结构.Node.js中主要包括Readable.Writable.Duplex(双工)和Tr ...
- Linq学习教程
http://www.cnblogs.com/foundation/archive/2009/01/05/1369371.html
- 设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP
一.ISP简介(ISP--Interface Segregation Principle): 使用多个专门的接口比使用单一的总接口要好.一个类对另外一个类的依赖性应当是建立在最小的接口上的.一个接口代 ...
- Spring Security 源码解析(一)
上篇 Spring Security基本配置已讲述了Spring Security最简单的配置,本篇将开始分析其基本原理 在上篇中可以看到,在访问 http://localhost:18081/use ...