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

 更新时间:2018年02月01日 14:50:52   作者:limeiky  
这篇文章主要介绍了js中getBoundingClientRect的作用及兼容方案详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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是指底边到页面顶边的距离。

看图:

 

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>

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

相关文章

  • Jquery调用iframe父页面中的元素及方法

    Jquery调用iframe父页面中的元素及方法

    对于javascript操作iframe父级页面元素的方法,大家应该都非常清楚了,下面结合当前非常流行的jquery分享一下如何使用jquery查找和操作iframe父级页面元素的实现代码。
    2016-08-08
  • MQTT.js 入门使用教程

    MQTT.js 入门使用教程

    MQTT.js 是一个开源的 MQTT 协议的客户端库,使用 JavaScript 编写,主要用于 Node.js 和 浏览器环境中,这篇文章主要介绍了MQTT.js 入门教程,需要的朋友可以参考下
    2023-04-04
  • js 自动播放的实例代码

    js 自动播放的实例代码

    这篇文章主要介绍了js 自动播放的实例代码,有需要的朋友可以参考一下
    2013-11-11
  • 微信小程序实现列表项左滑删除效果

    微信小程序实现列表项左滑删除效果

    这篇文章主要为大家详细介绍了微信小程序实现列表项左滑删除效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 用js实现层随着内容大小动态渐变改变 推荐

    用js实现层随着内容大小动态渐变改变 推荐

    以前做谷歌的小工具时,api里提供了一个很有用的函数,那就是在程序运行时可以使层动态随内容大小而变化,而且是平滑变换,在一些jquery的lightbox里也普遍有这种效果,看起来很酷的样子。
    2009-12-12
  • js实现类bootstrap模态框动画

    js实现类bootstrap模态框动画

    这篇文章主要为大家详细介绍了js实现类bootstrap模态框动画的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • elemetUi 组件--el-upload实现上传Excel文件的实例

    elemetUi 组件--el-upload实现上传Excel文件的实例

    这篇文章主要介绍了elemetUi 组件--el-upload实现上传Excel文件的实例的相关资料,希望通过本文大家能够实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • JS Array.from()将伪数组转换成数组的方法示例

    JS Array.from()将伪数组转换成数组的方法示例

    这篇文章主要介绍了JS Array.from()将伪数组转换成数组的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 微信小程序实现手指触摸画板

    微信小程序实现手指触摸画板

    这篇文章主要为大家详细介绍了微信小程序实现手指触摸画板,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • JavaScript实现浏览器内多个标签页之间通信

    JavaScript实现浏览器内多个标签页之间通信

    这篇文章主要为大家详细介绍了JavaScript如何实现浏览器内多个标签页之间通信,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04

最新评论