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 相关文章推荐
日期函数扩展类Ver0.1.1
Sep 07 Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
Feb 02 Javascript
JavaScript中的eval()函数详解
Aug 22 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 Javascript
JS实现直接运行html代码的方法
Mar 13 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
Aug 22 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 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
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP读取Excel类文件
2017/05/15 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
JavaScript类库D
2010/10/24 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
Python查看微信撤回消息代码
2018/06/07 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python中按键来获取指定的值
2019/03/02 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
银行介绍信范文
2014/01/10 职场文书
专家推荐信模板
2014/05/09 职场文书
安全先进班组材料
2014/12/26 职场文书
党小组评议意见
2015/06/02 职场文书
Nginx实现负载均衡的项目实践
2022/03/18 Servers