js中getBoundingClientRect的作用及兼容方案详解


Posted in Javascript onFebruary 01, 2018

1、getBoundingClientRect的作用

getBoundingClientRect用于获取某个html元素相对于视窗的位置集合。

执行 object.getBoundingClientRect();会得到元素的top、right、bottom、left、width、height属性,这些属性以一个对象的方式返回。

getBoundingClientRect()

这个方法返回一个矩形对象,包含四个属性:left、top、right和bottom。分别表示元素各边与页面上边和左边的距离。

var box=document.getElementById('box'); // 获取元素

alert(box.getBoundingClientRect().top); // 元素上边距离页面上边的距离

alert(box.getBoundingClientRect().right); // 元素右边距离页面左边的距离

alert(box.getBoundingClientRect().bottom); // 元素下边距离页面上边的距离

alert(box.getBoundingClientRect().left); // 元素左边距离页面左边的距离

2.getBoundingClientRect上下左右属性值解释

主要是left和bottom要解释一下,left是指右边到页面最左边的距离,bottom是指底边到页面顶边的距离。

看图:

 js中getBoundingClientRect的作用及兼容方案详解

3. 浏览器兼容性

ie5以上都能支持,但是又一点点地方需要修正一下,

IE67的left、top会少2px,并且没有width、height属性。

4、利用getBoundingClientRect来写一个获取html元素相对于视窗的位置集合的方法

<div id="test" style="width: 100px; height: 100px; background: #ddd;"></div>
<script>
 function getObjXy(obj){
  var xy = obj.getBoundingClientRect();
  var top = xy.top-document.documentElement.clientTop+document.documentElement.scrollTop,//document.documentElement.clientTop 在IE67中始终为2,其他高级点的浏览器为0
   bottom = xy.bottom,
   left = xy.left-document.documentElement.clientLeft+document.documentElement.scrollLeft,//document.documentElement.clientLeft 在IE67中始终为2,其他高级点的浏览器为0
   right = xy.right,
   width = xy.width||right - left, //IE67不存在width 使用right - left获得
   height = xy.height||bottom - top;

  return {
   top:top,
   right:right,
   bottom:bottom,
   left:left,
   width:width,
   height:height
  }
 }

 var test = getObjXy(document.getElementById('test'));
 alert("top:" + test.top + ", right:" + test.right + ", bottom:" + test.bottom + ", left:" + test.left);
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
JavaScript异步编程Promise模式的6个特性
Apr 03 Javascript
js检测浏览器版本、核心、是否移动端示例
Apr 24 Javascript
纯javascript实现四方向文本无缝滚动效果
Jun 16 Javascript
不想让浏览器运行javascript脚本的方法
Nov 20 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
vue父组件中获取子组件中的数据(实例讲解)
Sep 27 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
viewer.js实现图片预览功能
Jun 24 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 Javascript
深入剖析Express cookie-parser中间件实现示例
Feb 01 #Javascript
JS 实现百度搜索功能
Feb 01 #Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 #Javascript
微信小程序日期时间选择器使用方法
Feb 01 #Javascript
NW.js 简介与使用方法
Feb 01 #Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 #Javascript
Vue组件之自定义事件的功能图解
Feb 01 #Javascript
You might like
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
js删除所有的cookie的代码
2010/11/25 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python实现自动发送报警监控邮件
2018/06/21 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
会计毕业生求职简历的自我评价
2013/10/20 职场文书
合同专员岗位职责
2013/12/18 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
故宫英文导游词
2015/01/31 职场文书
综合测评自我评价
2015/03/06 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
高中班长竞选稿
2015/11/20 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Python学习开发之图形用户界面详解
2021/08/23 Python