js获取元素相对窗口位置的实现代码


Posted in Javascript onSeptember 28, 2014

JS获取元素的offsetTop,offsetLeft等属性

obj.clientWidth //获取元素的宽度

obj.clientHeight //元素的高度
obj.offsetLeft //元素相对于父元素的left
obj.offsetTop //元素相对于父元素的top
obj.offsetWidth //元素的宽度
obj.offsetHeight //元素的高度

区别:

clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = width + padding + border
offset比client多了border的宽度

//获取元素的纵坐标(相对于窗口)
function getTop(e){
  var offset=e.offsetTop;
  if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
  return offset;
}
//获取元素的横坐标(相对于窗口)
function getLeft(e){
  var offset=e.offsetLeft;
  if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
  return offset;
}

之前也写过一篇JS关于获取元素位置的文章:JS获取元素的offsetTop,offsetLeft等属性,我们可以通过offsetTop和offsetLeft属性获取元素相对窗口的位置,但offsetTop和offsetLeft属性都是相对于父元素定位的,而通常需要获取位置的元素都不是在最外层,所以遍历上级元素的offset相关属性少不了。那效率就成问题了。

//获取元素的纵坐标(相对于窗口)
function getTop(e){
var offset=e.offsetTop;
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
return offset;
}
//获取元素的横坐标(相对于窗口)
function getLeft(e){
var offset=e.offsetLeft;
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
return offset;
}

好在浏览器给我提供了相应的接口getBoundingClientRect,这个方法最早出现在IE浏览器中,后来的浏览器也跟着支持了这个方法,而且还更加完善,IE中只能获取到元素的left,top,bottom,right的属性,而后面的现代浏览器还能获取到元素的width和

Chrome Firefox (Gecko) Internet Explorer Opera Safari
1.0 3.0 (1.9) 4.0 (Yes) 4.0

这里要注意的是,bottom是元素底部相对于窗口顶部的距离,而不是像css里面position的bottom相对于窗口底部,同理,rihgt属性是元素最右边相对于窗口左边的距离。

var box = document.getElementById("box");
var pos = box.getBoundingClientRect();
box.innerHTML = "top:"+pos.top +
  "left:"+pos.left +
  "bottom:"+pos.bottom +
  "right:"+pos.right +
  "width:"+pos.width +
  "height:"+pos.height

原创文章,转载请注明: 转载自前端开发

Javascript 相关文章推荐
JS 无法通过W3C验证的处理方法
Mar 09 Javascript
javascript使用avalon绑定实现checkbox全选
May 06 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
Sep 14 Javascript
浅谈JavaScript异步编程
Jan 20 Javascript
Jil,高效的json序列化和反序列化库
Feb 15 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
webpack4.0 入门实践教程
Oct 08 Javascript
JavaScript页面加载事件实例讲解
Sep 01 Javascript
Javascript实现简易天数计算器
May 18 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 #Javascript
浏览器缩放检测的js代码
Sep 28 #Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 #Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 #Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 #Javascript
js文件包含的几种方式介绍
Sep 28 #Javascript
javascript中bind函数的作用实例介绍
Sep 28 #Javascript
You might like
聊天室php&mysql(二)
2006/10/09 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
Javascript typeof 用法
2008/12/28 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
简单了解JavaScript作用域
2020/07/31 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python实现的简单发送邮件脚本分享
2014/11/07 Python
python实现发送邮件功能代码
2017/12/14 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
详解python读取和输出到txt
2019/03/29 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
Gap工厂店:Gap Factory
2017/11/02 全球购物
大学社团计划书
2014/05/01 职场文书
大一新生检讨书
2014/10/29 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
大学生村官个人总结
2015/02/15 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL