DOM操作之确定元素大小
![](/assets/blank.gif)
IE、Firefox 3+、Safari 4+、Opera 9.5及Chrome为每个元素都提供了一个 getBoundingClientRect() 方法。这个方法返回会一个矩形对象,包含4个属性: left 、 top 、 right 和 bottom 。这些属性给出了元素在页面中相对于视口的位置。但是,浏览器的实现稍有不同。IE8及更早版本认为文档的左上角坐标是(2,2),而其他浏览器包括IE9则将传统的(0,0)作为起点坐标。因此,就需要在一开始检查一下位于(0,0)处的元素的位置,在IE8及更早版本中,会返回(2,2),而在其他浏览器中会返回(0,0)。来看下面的函数:
function getBoundingClientRect(element){
if (typeof arguments.callee.offset != “number”){
var scrollTop = document.documentElement.scrollTop;
var temp = document.createElement(“div”);
temp.style.cssText = “position:absolute;left:0;top:0;”;
document.body.appendChild(temp);
arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop;
document.body.removeChild(temp);
temp = null;
}
var rect = element.getBoundingClientRect();
var offset = arguments.callee.offset;
return {
left: rect.left + offset,
right: rect.right + offset,
top: rect.top + offset,
bottom: rect.bottom + offset
};
}
这个函数使用了它自身的属性来确定是否要对坐标进行调整。第一步是检测属性是否有定义,如果没有就定义一个。最终的 offset 会被设置为新元素上坐标的负值,
实际上就是在IE中设置为-2,在Firefox和Opera中设置为-0。为此,需要创建一个临时的元素,将其位置设置在(0,0),然后再调用其 getBoundingClientRect() 。而之所以要减去视口的 scrollTop ,是为了防止调用这个函数时窗口被滚动了。这样编写代码,就无需每次调用这个函数都执行两次 getBoundingClientRect() 了。接下来,再在传入的元素上调用这个方法并基于新的计算公式创建一个对象。
![](/assets/blank.gif)
好了,今天的文章就到这里,本文由Web前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!
![](/assets/blank.gif)
上一节
DOM操作之确定元素大小相关推荐
- JS的DOM操作1--获取元素与修改元素(附带动图案例)
1.获取元素与修改元素 https://blog.csdn.net/TroyeSivanlp/article/details/120580055 2.创建自定义属性和节点 https://blog.c ...
- jQuery的DOM操作之选择元素
.get() 用jQuery选择器选择出来的元素被包装为jQuery对象,而面对不同的需求可能需要我们获取的有时候是jQuery对象,有时候是原生DOM元素,此时使用get方法进行进一步的选择可获得原 ...
- JS的dom操作基础——获取元素
系统提供的方法 在H5之前的技术: 1.getElementById("目标元素的id值") 通过标签的id获取,如果未找到返回null. 2.getElementsByClas ...
- html中dom多会有影响吗,DOM操作造成的页面卡顿问题及解决
相关目录 以下为我总结的其他性能优化点,欢迎参考,指点及吐槽 前言 界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很 ...
- python界面卡顿_前端页面卡顿、也许是DOM操作惹的祸?
界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很高,页面前端代码的性能瓶颈也大多集中在DOM操作上,所以前端性能优化 ...
- 前端页面卡顿、也许是DOM操作惹的祸?
界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很高,页面前端代码的性能瓶颈也大多集中在DOM操作上,所以前端性能优化 ...
- DOM操作造成的页面卡顿问题及解决
前言 界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很高,页面前端代码的性能瓶颈也大多集中在DOM操作上,所以前端性 ...
- 19号以后包括数组在内的所有内容(数组、函数、方法、dom操作)
数组: 1.数组就是许多变量,他们的名称和数据类型都是一致的. 数组元素:就是数组里面的每一项 2.数组下标: 数组的下标是0的元素是数组的第一个元素(数组的下标是从0开始的). 3.获取数组的长度: ...
- jQuery 之 [ DOM操作 ]
jQuery的DOM操作 查找节点 元素节点 可以通过jQuery选择器来查找元素节点 属性节点 通过attr()方法来获取指定元素节点的属性节点 文本节点 通过text()方法来获取指定元素节点的文 ...
最新文章
- leetcode 206 Reverse Linked List
- ppt的一些基础操作
- WINCE下的MINGW交叉编译环境下内存崩溃地址的查找方法。
- jQuery---过滤选择器
- 怎么用计算机杀毒,电脑怎样查杀病毒
- 安卓应用安全指南 4.1.2 创建/使用活动 规则书
- linux已使用线程,在Linux中使用线程
- 非法关机的时候,postgresql启动故障的解决
- centos一键安装包无法创建vhost
- LeetCode刷题——11. 盛最多水的容器
- JS获取浏览器高度、屏幕高度、宽屏
- mac下配置环境变量
- JS十六进制转浮点、字符串转为ArrayBuffer、ArrayBuffer转16进制字符串、16进制转10进制、crc校验位、十六进制转中文字符串(小程序、浏览器)、十六进制字符串转ascall字串
- 人工智能--启发性信息和估价函数
- Discuz数据字典1
- 【Flume】Flume原理简述及示例实践
- 【玩转python】Flask基金数据可视化
- SDOI2014 Round1 day2
- 风河产品license介绍(Wind River Product Licensing video)
- 自动化测试面试题及答案大全(上)
热门文章
- 蚂蚁回应渠道之争;微软更新致大规模服务中断;OpenSSH 8.4 发布 | 极客头条
- 任正非:华为的岗位没有年龄限制;腾讯微博将于9月28日停止运营;微软关闭Visual Studio Online|极客头条
- UCloud发布新一代归档存储产品,存储成本直降80%
- 腾讯回应“被骗”;黄峥卸任拼多多 CEO;Firefox 78 发布 | 极客头条
- 如何快速写一款小而美的“上滑无限加载的控件”?| 博文精选
- 达摩院实现自动驾驶核心技术突破,首次实现3D物体检测精度与速度的兼得
- 如何用 CNN 玩转 AlphaGo 版的五子棋?
- 超实用!Google AutoML 图像分类模型全在这!
- 深度学习专项课程精炼图笔记!必备收藏 | 原力计划
- Android 10 vs iOS 13,逐鹿手机操作系统之王!