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

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. 在 Rolling Update 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(146)

    上一节讨论了 Health Check 在 Scale Up 中的应用,Health Check 另一个重要的应用场景是 Rolling Update.试想一下下面的情况: 现有一个正常运行的多副本应 ...

  2. oracle10g 基于linux6安装问题收集

    1.[oracle@rsyslogserver database]$ dbca -silent -responseFile /home/oracle/database/dbca.rsp No comm ...

  3. 配置VIP地址

    10.10.10.7  mysql主 redis从 10.10.10.8  mysql从 redis主 现游戏架构如上,游戏后端数据库配置集群.场景描述:若是一台服务器宕机之后,及时切换数据库保持业务 ...

  4. 网络通信 --> Socket、TCP/IP、HTTP、FTP及网络编程

    Socket.TCP/IP.HTTP.FTP及网络编程 聊聊Socket.TCP/IP.HTTP.FTP及网络编程

  5. poj3358 Period of an Infinite Binary Expansion

    Period of an Infinite Binary Expansion 题目大意:给你一个分数,求这个分数二进制表示下从第几位开始循环,并求出最小循环节长度. 注释:int范围内. 想法:这题说 ...

  6. sqlite的limit使用

    如果我要取11-20的Account表的数据,则为: Select * From Person  Limit 9 Offset 10;表示从Person  表获取数据,跳过10行,取9行 .也可以这样 ...

  7. struct_2拦截器与过滤器

    这个为网上所剪切的知识点,仅为个人学习所用,无其他用途. 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者 ...

  8. 客户端(winform)更新

    winform更新有两种情况,一种是在线更新在线使用:直接右击项目发布出去就可以更新在线使用了.还有一种更新是不用一直连接网络的模式. 1:C#Winform程序如何发布并自动升级--------ht ...

  9. Leetcode 14——Longest Common Prefix

    题目:Write a function to find the longest common prefix string amongst an array of strings. 很简单的一个描述,最 ...

  10. Rails 定时任务——whenever实现周期性任务

    根据项目的进展,我们需要实现后台进行定时读取信息的功能,而最关键的实现部分是周期性功能,根据调研,决定使用whenever来实现这一功能. github:https://github.com/java ...