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 ...
随机推荐
- 笔记:Maven 聚合和继承
聚合模块 我们希望一次构建两个或更多项目,而不是到每个模块的目录下分别执行mvn命令,Maven 聚合这一特性就是为该需求服务的, 为了使用聚合,我们必须创建一个聚合模块,通过该模块与其他项目聚合,并 ...
- JAVA实现双向链表的增删功能
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
- 【Python】 高级文件操作 shutil
shutil 很多时候,我想要对文件进行重命名,删除,创建等操作的时候的想法就是用subprocess开一个子进程来处理,但是实际上shutil可以更加方便地提供os的文件操作接口,从而可以一条语句搞 ...
- Ubuntu如何配置SSH免密登录
前言 在搭建hadoop集群时,需要主机和副机之间实现SSH免密登录 一.环境准备 1.ubuntu两台 二.安装SSH 1.首先检测一下本机有没有安装SSH服务,如果没有任何打印说明未安装 sudo ...
- 指令-arModal-点击提示框模板
html 使用<ar-modal></ar-modal>: <ar-modal modal-obj="modalObj" ok="newAl ...
- Beta No.7
今天遇到的困难: 构造新适配器的时候出现了某些崩溃的问题 ListView监听器有部分的Bug 今天完成的任务: 陈甘霖:完成相机调用和图库功能,完成阿尔法项目遗留下来的位置调用问题,实现百度定位 蔡 ...
- 《团队-Oldnote-最终程序》
托管平台地址:https://github.com/Vcandoit/Notepad 小组名称:TOP 小组成员合照:待添加 程序运行方法:手机app,安装到手机点击即可运行,打开页面会有图标提示. ...
- Alpha冲刺No.7
一.站立式会议 彻底完成初步的界面设计 实现界面的简单跳转 完成部分事件监听 移植摄像头.图库功能到真实手机环境测试 数据库上传获取日记 二.项目实际进展 完成了简单的界面设计 大致完成了跳转任务 数 ...
- Alpha第八天
Alpha第八天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- python实现线性回归
参考:<机器学习实战>- Machine Learning in Action 一. 必备的包 一般而言,这几个包是比较常见的: • matplotlib,用于绘图 • numpy,数组处 ...