首页 web前端 js教程 js获取元素相对窗口位置的实现代码_javascript技巧

js获取元素相对窗口位置的实现代码_javascript技巧

May 16, 2016 pm 04:35 PM
位置 元素

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的宽度

1

2

3

4

5

6

7

8

9

10

11

12

//获取元素的纵坐标(相对于窗口)

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相关属性少不了。那效率就成问题了。

1

2

3

4

5

6

7

8

9

10

11

12

//获取元素的纵坐标(相对于窗口)

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属性是元素最右边相对于窗口左边的距离。

1

2

3

4

5

6

7

8

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

登录后复制

原创文章,转载请注明: 转载自前端开发

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Win11的启动路径以及如何打开它 Win11的启动路径以及如何打开它 Jan 03, 2024 pm 11:13 PM

Win11的启动路径以及如何打开它

详细介绍如何在Windows 11上打开环境变量设置 详细介绍如何在Windows 11上打开环境变量设置 Dec 30, 2023 pm 06:07 PM

详细介绍如何在Windows 11上打开环境变量设置

了解pip安装包存储的位置和结构 了解pip安装包存储的位置和结构 Jan 18, 2024 am 08:23 AM

了解pip安装包存储的位置和结构

高德地图家的位置怎么改 高德地图家的位置怎么改 Feb 27, 2024 pm 07:31 PM

高德地图家的位置怎么改

快手发布于哪里怎么改位置?已经上传的视频怎么添加位置呢? 快手发布于哪里怎么改位置?已经上传的视频怎么添加位置呢? Mar 21, 2024 pm 06:00 PM

快手发布于哪里怎么改位置?已经上传的视频怎么添加位置呢?

星穹铁道克劳克影视乐园折纸小鸟位置 星穹铁道克劳克影视乐园折纸小鸟位置 Mar 27, 2024 pm 11:51 PM

星穹铁道克劳克影视乐园折纸小鸟位置

最后纪元竞技场在哪 最后纪元竞技场在哪 Mar 07, 2024 pm 08:16 PM

最后纪元竞技场在哪

美团天天神券位置在哪_美团天天神券位置介绍 美团天天神券位置在哪_美团天天神券位置介绍 Mar 27, 2024 pm 05:11 PM

美团天天神券位置在哪_美团天天神券位置介绍

See all articles