jacascript 判断元素尺寸和位置
前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!
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 判断元素尺寸和位置的更多相关文章
- 深入学习jQuery元素尺寸和位置操作
× 目录 [1]尺寸设置 [2]位置设置 前面的话 对于javascript来说,元素尺寸有scroll.offset.client三大属性,以及一个强大的getBoundingClientRect( ...
- JavaScript--DOM元素尺寸和位置(22)
一 获取元素的CSS大小 1.通过style内联获取元素的大小 var box = document.getElementById('box'); // 获得元素; box.style.width; ...
- 第一百一十七节,JavaScript,DOM元素尺寸和位置
学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 1. ...
- DOM元素尺寸和位置
一.获取元素 CSS大小 1.通过style 内联获取元素的大小 var box = document.getElementById('box'); //获取元素 box.style.width; / ...
- DOM元素尺寸和位置(clientwidth ,scrollwidth , offsetwidth.......)
[1] slientWidth 和 sclientHeight slientWidth:获取的是可视宽度 slientHeight:获取的是可视高度 <html> <head> ...
- JavaScript(第二十一天)【DOM元素尺寸和位置】
学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 ...
- JS-学习-DOM元素尺寸和位置
一,获取元素的css大小 1.通过style内联获取元素的大小 var box = document.getElementById('box'); // 获得元素; box.style. ...
- 原生js--元素尺寸、位置和溢出
判断元素尺寸和位置的方法: elem.getBoundingClientRect() // 已验证IE7+.firefox.chrome均支持此方法 该方法返回一个对象(坐标值为视口坐标,不是文档坐 ...
- web前端开发中常用的尺寸和位置
我们在日常web前端开发过程中,会经常用到各种尺寸和位置.通常是js做动画的时候.轮播图,滚屏动画,粒子,碰撞检测,拖拽,滚动加载等等.这里我将常用的尺寸和位置的获取进行总结,不包括canvas,SV ...
随机推荐
- TCP 详解
计算机网络中比较中要的无非就是 TCP/IP 协议栈,以及应用层的 HTTP 和 HTTPS . 前几天一直炒的的比较火的就是 HTTP/2.0 了,但是其实 HTTP/2.0 早在2015年的时候就 ...
- Logback.xml 给变量指定默认值
随着通用日志组件转入 Slf4j,logback 也变成了默认的日志实现,像 log4j 一样,logback.xml 中也可以使用系统属性或环境变量,如 ${catalina.home}.在 log ...
- Java中删除第一个集合中以某某开头的元素,删除第二个集合中以某某结尾的元素,并合并成一个集合
import java.util.ArrayList; import java.util.List; public class Test { public static void main(Strin ...
- zabbix的各种键值
zabbix服务器端通过与zabbix agent通信来获取客户端服务器的数据,agent分为两个版本,在配置主机我们可以看到一个是agent,另一个是agent(active). agent:zab ...
- Jmeter中正则表达式提取器使用详解
在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及到请求的测试,但是对于数据的传递起着很大的作用,本篇博文就是主要讲解关于正则表达式及其在Jmeter的Sampler中的调 ...
- Dom属性方法
一.javascript的三大核心 1.ECMAScript js的语法标准 2.DOM Document object Model 文档对象模型,提供的方法可以让js操作html标签 3.BOM B ...
- 一周总结:AutoEncoder、Inception 、模型搭建及下周计划
一周总结:AutoEncoder.Inception .模型搭建及下周计划 1.AutoEncoder: AutoEncoder: 自动编码器就是一种尽可能复现输入信号的神经网络:自动编码器必须捕 ...
- MongoDB系列三(Spring集成方案).
一.前言 MongoDB是最为流行的开源文档数据库之一.Spring Data MongoDB提供了三种方式在Spring应用中使用MongoDB: 通过注解实现对象-文档映射: 使用MongoTem ...
- 20145237《Java程序设计》第一周学习总结
教材学习内容总结 java可分为Java SE.Java EE.Java ME三大平台. java SE分为JVM.JRE.JDK.与java语言四个部分. JRE包括java SE API和JVM. ...
- pickle使用及案例
一.字典格式数据源写入数据库文件 #!/usr/bin/env python # -*- coding:utf-8 -*- import pickle accounts ={1000:'alex', ...