开始表演

今天来聊一下两个相似的方法,它们就是: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 方法的更多相关文章

  1. getBoundingClientRect方法获取元素在页面中的相对位置

    获取元素位置可以用 offset 或 getBoundingClientRect,使用 offset 因为兼容性不好,比较麻烦,offset获取位置会形成"回溯".而 getBou ...

  2. getBoundingClientRect()方法

    是在<javascript高级程序设计>中看到了这个方法.getBoundingClientRect在IE5中就有,但似乎不怎么引起我们注意. 返回值:它返回一个clientRect对象, ...

  3. JavaScript中getBoundingClientRect()方法详解

    获取浏览器滚动的高度: scrollTop=document.documentElement.scrollTop || document.body.scrollTop getBoundingClien ...

  4. 利用getBoundingClientRect方法实现简洁的sticky组件

    补充于2016-03-20: 本文实现有不足,不完美的地方,请在了解本文相关内容后,移步阅读<sticky组件的改进实现>了解更佳的实现. sticky组件,通常应用于导航条或者工具栏,当 ...

  5. 工作中的趣事:聊聊ref/out和方法参数的传递机制

    0x00 前言 我在之前的游戏公司工作的时候,常常是作为一只埋头实现业务逻辑的码农.在工作之中不常有同事会对关于编程的话题进行交流,而工作之余也没有专门的时间进行技术分享.所以对我而言上家虽然是一家游 ...

  6. JavaScript中的getBoundingClientRect()方法

    这个方法返回一个矩形对象,包含四个属性:left.top.right和bottom.分别表示元素各边与页面上边和左边的距离. getBoundClientRect()方法返回的对象中和CSS中所定义不 ...

  7. CSSOM之getboundingclientrect和getclientrects

    TextRectangle 对于文本对象,W3C提供了一个 TextRectangle 对象,这个对象是对文本区域的一个解释. 对于 i,span,em等display 是inline的标签,在书写文 ...

  8. 获取元素位置信息:getBoundingClientRect

    一个神奇的方法. 一.历史 偷个懒,上个传送门:http://www.cnblogs.com/2050/archive/2012/02/01/2335211.html 二.介绍 DOM元素方法,返回一 ...

  9. WebBrowser常用属性方法介绍

    WebBrowser 常用属性方法 ■■方法 ==============================  ▲GoBack    相当于IE的"后退"按钮,使你在当前历史列表中后 ...

随机推荐

  1. Ubuntu链接库查找

    apt-get install apt-file apt-get update apt-file search

  2. 转载 linux umount 时出现device is busy 的处理方法--fuser

    http://www.cnblogs.com/spicy/p/6894333.html (原文链接) 当任何目录有 mount, 然后有程序使用/挂在那个目录上的话, 就没有办法 umount 掉, ...

  3. Eclipse *版本(图文详解)

    不多说,直接上干货! 关于Eclipse的版本介绍 Eclipse Standard 该版本是eclipse最基础的版本,适合Java se个人开发者.或希望根据自己需求配置插件的开发者使用. Ecl ...

  4. Cloudera Impala源码分析: SimpleScheduler调度策略详解包括作用、接口及实现等

    问题导读:1.Scheduler任务中Distributed Plan.Scan Range是什么?2.Scheduler基本接口有哪些?3.QuerySchedule这个类如何理解?4.Simple ...

  5. 根据模板导出excel

    @RequestMapping(value = "/export", method = RequestMethod.GET) public void exportApprovals ...

  6. HihoCoder - 1040 矩形判断

    矩形判断 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. Input 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4 ...

  7. [笔记] Python字典

    好记忆不如烂笔头: #__author:Mifen #date: 2018/11/28 #不可变类型:整型,字符串,浮点型(不等于小数,但包括小数),元组(只读,不可修改) #可变类型:列表,字典(键 ...

  8. java 基本理论知识点

    通过JAVAOO 的笔试后,总结了一些理论的知识点. 1.main方法是怎么写的 public static void main(String [] args){}//最习惯的 public stat ...

  9. SpringMVC源码阅读:异常解析器

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  10. chown -R 用户名:组名 ./ 及 chown用法介绍

    当我们在不通过yum(CentOS).apt-get(Ubuntu)来安装MySQL的时候,通常执行以下命令来改变目录的拥有者: [root@localhost ~]# chown -R mysql: ...