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 日期比较相关天数代码
Apr 02 Javascript
Node.js中的流(Stream)介绍
Mar 30 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
jQuery simpleModal插件的使用介绍
Aug 30 Javascript
jQuery实现鼠标滑过图片移动特效
Dec 08 Javascript
webpack入门+react环境配置
Feb 08 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 Javascript
javascript实现的时间格式加8小时功能示例
Jun 13 Javascript
element跨分页操作选择详解
Jun 29 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对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
删除重复数据的算法
2006/11/23 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
python 正则式使用心得
2009/05/07 Python
python中cPickle用法例子分享
2014/01/03 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
MYSQL基础面试题
2012/05/13 面试题
Java servlet面试题
2012/03/04 面试题
关于迟到的检讨书
2014/01/26 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
公务员政审单位鉴定材料
2014/05/16 职场文书
贷款承诺书
2015/01/20 职场文书
运动会宣传语
2015/07/13 职场文书
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL