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 相关文章推荐
JavaScript 语法集锦 脚本之家基础推荐
Nov 15 Javascript
克隆javascript对象的三个方法小结
Jan 12 Javascript
关于COOKIE个数与大小的问题
Jan 17 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
JavaScript通过字典进行字符串翻译转换的方法
Mar 19 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
Jul 14 Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 Javascript
详解使用angular的HttpClient搭配rxjs
Sep 01 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
JS实现放烟花效果
Mar 10 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
IE8 原生JSON支持
2009/04/13 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
浅谈Python单向链表的实现
2015/12/24 Python
Python解析树及树的遍历
2016/02/03 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
行政助理岗位职责范文
2013/12/03 职场文书
个性发展自我评价
2014/02/11 职场文书
工程质量月活动方案
2014/02/19 职场文书
公司承诺书范文
2014/05/19 职场文书
小学班级口号
2014/06/09 职场文书
大型公益活动策划方案
2014/08/20 职场文书
防灾减灾活动总结
2014/08/30 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
北京导游词
2015/02/12 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书