前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

getBoundingClientRect()

  判断一个元素的尺寸和位置是简单的方法就是使用 obj.getBoundingClientRect();

  obj.getBoundingClientRect() 方法返回一个对象,该对象提供当前元素节点的大小、它相对于视口(viewport)的位置等信息;

  但是,各个浏览器返回的对象包含的属性不相同:

  • firefox : top left right bottom width height x y(其中,x=left,y=top)
  • chrome/safari/IE9及以上 : top left right bottom width height
  • IE8及以下 : top left right bottom

  该方法返回的宽高是偏移宽高 offsetWidth、offsetHeight ;

  Element.getBoundingClientRect().height = border + padding + height ;

  Element.getBoundingClientRect().width = border + padding + width ;

  top: 元素顶部相对于视口的纵坐标;

  left: 元素左边界相对于视口的横坐标;

  right: 元素右边界相对于视口的横坐标; right = left + width ;

  bottom: 元素底部相对于视口的纵坐标; bottom = top + height ;

        <style type="text/css">
*{padding: 0;margin: 0;}
#test{
width: 100px;
height: 100px;
padding: 10px;
line-height: 200px;
border:1px solid black;
overflow:scroll;
}
</style> <div id="test">内容</div> <script>
var oTest = document.getElementById('test');
//chrome/safari: 220(10+200+10)
//firefox/IE: 210(10+200)
console.log(oTest.scrollHeight);//220
//103(100+10+10-17)
console.log(oTest.clientHeight);//103
//122(100+10+10+1+1) //该方法返回的宽高是偏移宽高 offsetWidth、offsetHeight ;
console.log(oTest.offsetHeight);//122
//122(100+10+10+1+1)
console.log(oTest.getBoundingClientRect().height);//122
</script>

getClientRects()

  getClientRects() 方法与 getBoundingClientRect() 不同,该方法是一个返回元素的数个矩形区域的类数组对象。每个类数组对象的参数与 getBoundingClientRect() 方法相同,每个类数组对象都有bottom、height、left、right、top和width六个属性,表示它们相对于视口的四个坐标,以及本身的高度和宽度;   

  如果应用于块级元素,则 getClientRects()[0].attr 和 getBoundingClientRect().attr 的属性返回相同的值;

        <style type="text/css">
*{padding: 0;margin: 0;}
#test{
width: 100px;
height: 100px;
padding: 10px;
line-height: 200px;
border:1px solid black;
overflow:scroll;
}
</style> <div id="test">内容</div> <script type="text/javascript">
var oTest = document.getElementById('test');
console.log(oTest.getClientRects()[0].height);//122
console.log(oTest.getBoundingClientRect().height);//122
</script>

  实际上,该方法主要用于内联元素,内联元素有多少行,该方法返回的对象有多少个成员。这个方法主要用于判断行内元素是否换行;

        <div class="wrapper">
<span id="test" style="margin: 0;padding: 0;">
hello world
hello world
hello world
</span>
</div>
<script type="text/javascript">
var oTest = document.getElementById('test');
console.log(oTest.getClientRects().length);//3
</script>

getBoundingClientRect(x,y)

  有时我们想判定在视口中的指定位置上有什么元素。这可以用 document.elementFromPoint(x,y) 方法来判定。传递 X 和 Y 坐标(相对于视口),该方法选择在指定坐标的最上层和最里层的 Element 对象。如果指定的点在视口以外,elementFromPoint() 返回 null;

  最上层是指 z-index 最大的元素;最里层是指最里层的子元素;

  这个方法可以用来检测元素是否发生重叠或是碰撞;

        <style type="text/css">
*{padding: 0;margin: 0;}
</style> <div class="test" style="width: 100px;height: 100px;">
<span id="span">hello world</span>
</div> <script type="text/javascript">
var oTest = document.getElementById('test');
console.log(document.elementFromPoint(10,10).id);//3
</script>

jacascript 判断元素尺寸和位置的更多相关文章

  1. 深入学习jQuery元素尺寸和位置操作

    × 目录 [1]尺寸设置 [2]位置设置 前面的话 对于javascript来说,元素尺寸有scroll.offset.client三大属性,以及一个强大的getBoundingClientRect( ...

  2. JavaScript--DOM元素尺寸和位置(22)

    一 获取元素的CSS大小 1.通过style内联获取元素的大小 var box = document.getElementById('box'); // 获得元素; box.style.width; ...

  3. 第一百一十七节,JavaScript,DOM元素尺寸和位置

    学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 1. ...

  4. DOM元素尺寸和位置

    一.获取元素 CSS大小 1.通过style 内联获取元素的大小 var box = document.getElementById('box'); //获取元素 box.style.width; / ...

  5. DOM元素尺寸和位置(clientwidth ,scrollwidth , offsetwidth.......)

    [1] slientWidth 和 sclientHeight slientWidth:获取的是可视宽度 slientHeight:获取的是可视高度 <html> <head> ...

  6. JavaScript(第二十一天)【DOM元素尺寸和位置】

    学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解.   一.获取元素CSS大小 ...

  7. JS-学习-DOM元素尺寸和位置

    一,获取元素的css大小 1.通过style内联获取元素的大小 var box = document.getElementById('box');    // 获得元素;     box.style. ...

  8. 原生js--元素尺寸、位置和溢出

    判断元素尺寸和位置的方法: elem.getBoundingClientRect()  // 已验证IE7+.firefox.chrome均支持此方法 该方法返回一个对象(坐标值为视口坐标,不是文档坐 ...

  9. web前端开发中常用的尺寸和位置

    我们在日常web前端开发过程中,会经常用到各种尺寸和位置.通常是js做动画的时候.轮播图,滚屏动画,粒子,碰撞检测,拖拽,滚动加载等等.这里我将常用的尺寸和位置的获取进行总结,不包括canvas,SV ...

随机推荐

  1. SVN报E155024: Invalid relocation destination

    大家开发过程会遇到一个场景! 我们在使用SVN版本管理工具进行开发的过程中,前一个版本在Branch->201803 分支开发完成之后,后一版本要求在Branch->201804版本开发 ...

  2. Python 中 Iterator(迭代器)和Iterable(迭代对象)的区别

    直接可以用作for循环的数据类型有以下几种: tuple.list.dict.str等, 上述数据类型可以用作for循环的叫做可迭代对象Iterable.可以使用isinstance判断一个对象是否是 ...

  3. Sublime Text、webstorm等编译器快速编写HTML/CSS代码的技巧

    Sublime Text.webstorm等编译器,如果你从事Web前端开发的话,对这几款软件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演 ...

  4. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

  5. Django+xadmin打造在线教育平台(八)

    十一.用户信息 11.1.个人信息展示 (1)新建‘usercenter-bae.html’当母板 {% load staticfiles %} <!DOCTYPE html> <h ...

  6. C博客作业--指针

    一.PTA实验作业 题目1:输出月份英文名 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明. 选择这一题是因为这道题的通过率较低.为什么会这样 ...

  7. V7000存储数据恢复_底层结构原理拆解及Mdisk磁盘掉线数据恢复方法

    Storwize V7000(也就是我们常说的V7000)是新推出的一款中端存储系统,这款系统的定位虽然在中端,但是Storwize V7000提供有存储管理功能,这一功能以前只有高端存储才拥有(例如 ...

  8. 更优雅的方式: JavaScript 中顺序执行异步函数

    火于异步 1995年,当时最流行的浏览器--网景中开始运行 JavaScript (最初称为 LiveScript). 1996年,微软发布了 JScript 兼容 JavaScript.随着网景.微 ...

  9. php的格式化数字函数

    php格式化数字:位数不足前面加0补足 php格式化数字:位数不足前面加0补足 感谢:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12 ...

  10. 延迟确认和Nagle算法

    前篇文章介绍了三次握手和四次挥手,了解了TCP是如何建立和断开连接的,文末还提到了抓包挥手时的一个“异常”现象,当时无法解释,特地查了资料,知道了数据传输中的延迟确认策略. 何谓延迟确认策略? WIK ...