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 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
关于jQuery判断元素是否存在的问题示例探讨
Jul 21 Javascript
javascript 面向对象封装与继承
Nov 27 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
node基于puppeteer模拟登录抓取页面的实现
May 09 Javascript
vue异步加载高德地图的实现
Jun 19 Javascript
快速解决处理后台返回json数据格式的问题
Aug 07 Javascript
通过实例了解JS 连续赋值
Sep 24 Javascript
JSON stringify方法原理及实例解析
Oct 23 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 高手之路(三)
2006/10/09 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
php修改数组键名的方法示例
2017/04/15 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
基于iScroll实现下拉刷新和上滑加载效果
2017/07/18 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
对python中return和print的一些理解
2017/08/18 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
Python使用configparser库读取配置文件
2020/02/22 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
加拿大时装零售商:Influence U
2018/12/22 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
预备党员思想汇报范文
2014/01/11 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
大型公益活动策划方案
2014/08/20 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
nginx结合openssl实现https的方法
2021/07/25 Servers