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 ajax 登录验证实现代码
Sep 23 Javascript
jquery 卷帘效果实现代码(不同方向)
Feb 05 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
Sep 12 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
javascript实现获取服务器时间
May 19 Javascript
js实现简单的验证码
Dec 25 Javascript
[原创]jQuery常用的4种加载方式分析
Jul 25 Javascript
windows下vue.js开发环境搭建教程
Mar 20 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 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 不错的学习资料
2009/02/06 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php 类自动载入的方法
2015/06/03 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
python 性能提升的几种方法
2016/07/15 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
浅析使用Python搭建http服务器
2019/10/27 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python多线程获取返回值代码实例
2020/02/17 Python
python对文件的操作方法汇总
2020/02/28 Python
python Cartopy的基础使用详解
2020/11/01 Python
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
元旦获奖感言
2014/03/08 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
工程售后服务承诺书
2014/05/21 职场文书
美化环境标语
2014/06/20 职场文书
学校社团活动总结
2015/05/07 职场文书
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电