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阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
Jquery获得控件值的三种方法总结
Feb 13 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
Jan 28 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
图解javascript作用域链
May 27 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
JavaScript算法学习之冒泡排序和选择排序
Nov 02 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
微信小程序实现日历签到
Sep 21 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
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
基于JQuery的日期联动实现代码
2011/02/24 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
Vue编写多地区选择组件
2017/08/21 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Python pip配置国内源的方法
2020/02/14 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
python开根号实例讲解
2020/08/30 Python
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
String和StringBuffer的区别
2015/08/13 面试题
特色冷饮店创业计划书
2014/01/28 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
超市采购员岗位职责
2015/04/07 职场文书
java实现面板之间切换功能
2022/06/10 Java/Android
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL