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 相关文章推荐
jQuery 使用手册(五)
Sep 23 Javascript
js打印纸函数代码(递归)
Jun 18 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
jQuery实现只允许输入数字和小数点的方法
Mar 02 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
Dec 29 Javascript
vue-cli之router基本使用方法详解
Oct 17 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
Apr 17 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
element中table高度自适应的实现
Oct 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
将PHP作为Shell脚本语言使用
2006/10/09 PHP
一个php作的文本留言本的例子(二)
2006/10/09 PHP
php中autoload的用法总结
2013/11/08 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
js微信分享实现代码
2020/10/11 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
Python读写锁实现实现代码解析
2020/11/28 Python
安全生产责任书范本
2014/04/15 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
项目建议书怎么写
2014/05/15 职场文书
2014年班主任工作总结
2014/11/08 职场文书
Python中常见的导入方式总结
2021/05/06 Python