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之十一 添加事件核心方法
Jul 31 Javascript
获取非最后一列td值并将title设为该值的方法
Oct 30 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
一个简单不报错的summernote 图片上传案例
Jul 11 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 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中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
Javascript中的相等与不等运算
2010/04/25 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python FTP操作类代码分享
2014/05/13 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python 读写中文json的实例详解
2017/10/29 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python变量的作用域是什么
2020/05/26 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
学历公证委托书
2014/04/09 职场文书
财产公证书格式
2014/04/10 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
辩论赛新闻稿
2015/07/17 职场文书
商务宴会祝酒词
2015/08/11 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript