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 相关文章推荐
javascript event 事件解析
Jan 31 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
Sep 05 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
Nov 26 Javascript
jquery将一个表单序列化为一个对象的方法
Dec 02 Javascript
JavaScript闭包实例讲解
Apr 22 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
Aug 22 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
JavaScript函数柯里化
Nov 07 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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
一个php导出oracle库的php代码
2009/04/20 PHP
PHP简洁函数小结
2011/08/12 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
python批量修改文件后缀示例代码分享
2013/12/24 Python
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
RealTek面试题
2016/06/28 面试题
如何写一个自定义标签
2012/12/28 面试题
关于环保的建议书
2014/05/12 职场文书
乔迁新居祝福语
2019/11/04 职场文书