js获取元素到文档区域document的(横向、纵向)坐标的两种方法

js获取元素到文档区域document的(横向、纵向)坐标的两种方法获取页面中元素到文档区域document的横向、纵向坐标的两种方法及其比较在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法:一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根元素。所以,要得到

大家好,又见面了,我是你们的朋友全栈君。

获取页面中元素到文档区域document的横向、纵向坐标的两种方法及其比较
在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法:

一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现
在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根元素。所以,要得到元素到文档区域的坐标位置,只需通过while循环不断获取offsetParent的offsetLeft/offsetTop直到offsetParent = null为止。
js代码

// 获取元素到文档区域的坐标
function getPosition(element) {
var actualLeft = element.offsetLeft,
actualTop = element.offsetTop,
current = element.offsetParent; // 取得元素的offsetParent
// 一直循环直到根元素
while (current !== null) {
actualLeft += current.offsetLeft;
actualTop += current.offsetTop;
current = current.offsetParent;
}
// 返回包含left、top坐标的对象
return {
left: actualLeft,
top: actualTop
};
}

例子截图

js获取元素到文档区域document的(横向、纵向)坐标的两种方法

firebug下测试结果截图:(注:其他浏览器已通过测试!)

js获取元素到文档区域document的(横向、纵向)坐标的两种方法

 

二:通过 getBoundingClientRect() 方法实现
getBoundingClientRect方法用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗window的位置。返回的是一个对象,该对象有四个属性:top,left,right,bottom;该方法原本是IE Only的,但是FF3.0+和Opera9.5+已经支持了该方法,可以说在获得页面元素位置上效率有很大的提高。 另外,该方法避免使用while循环,而是直接获取数值来实现,比第一种方法性能要好,特别是在复杂的页面上更为明显。
js代码: 

// 获取元素到文档区域的坐标
function getPosition(element){
var dc = document,
rec = element.getBoundingClientRect(),
_x = rec.left, // 获取元素相对浏览器视窗window的左、上坐标
_y = rec.top;
// 与html或body元素的滚动距离相加就是元素相对于文档区域document的坐标位置
_x += dc.documentElement.scrollLeft || dc.body.scrollLeft;
_y += dc.documentElement.scrollTop || dc.body.scrollTop;
return {
left: _x,
top: _y
};
}

经测试,该方法与第一种方法获取元素相对于document的坐标大小相同,对于IE低版本浏览器,存在一些差异。

注意:记得要累加上html(IE除外)或body(针对IE)元素的水平或垂直滚动距离!
结语:上文已对如何获取元素相对于文档区域document的坐标位置做出了阐述,如遇到相关问题,可联系本人或直接发表评论,另外,对于右坐标right以及下坐标bottom的获取只需把left、top坐标的大小和元素本身的宽度(elem.offsetWidth)以及高度(elem.offsetHeight)相加即可,当然offsetWidth、offsetHeight属性会计算元素的内边距、边框,所以最好的办法还是通过getBoundingClientRect方法来获取。ps:补充一点,利用该方法返回对象的right-left = 元素宽度;bottom-top = 元素高度。可以获取不带边框的元素本身的宽度和高度。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161637.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaAPI之PropertyDescriptor[通俗易懂]

    JavaAPI之PropertyDescriptor[通俗易懂]随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)结构java.beans类PropertyDescriptorjava.lang.Objectjava.beans.FeatureDescriptorjava.beans….

    2022年10月1日
    1
  • css中,如何设置前景色的透明度?

    css中,如何设置前景色的透明度?

    2021年9月20日
    82
  • Pandas merge函数「建议收藏」

    Pandas merge函数「建议收藏」[toc]函数原型pd.merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=(‘_x’,’_y’),copy=True,indicator=False,validate=None)参数left:拼接的左侧DataFrame对象r.

    2022年5月12日
    44
  • golang程序员前景怎么样?Python、Java、go语言的优势互比「建议收藏」

    golang程序员前景怎么样?Python、Java、go语言的优势互比

    2022年2月11日
    95
  • PKI 体系概述_计算机学科体系概述

    PKI 体系概述_计算机学科体系概述CA中心——CA系统——数字证书CA中心管理并运营CA系统,CA系统负责颁发数字证书。专门负责颁发数字证书的系统称为CA系统,负责管理并运营CA系统的机构称为CA中心。所有与数字证书相关的各种概念和技术,统称为PKI(PublicKeyInfrastructure)。传统密码学换位加密法; 替换加密法;现代密码学加密基元加密基元就是一些基础的密码学算法,通过它们才能够构建更多的密码学算法、协议、应用程序。说明:散列函数(散列(hash)、指纹.

    2022年8月22日
    7
  • 玩转跨境电商_个人如何做跨境电商

    玩转跨境电商_个人如何做跨境电商近日日本最大二手交易平台Mercari日前对外宣布,将与阿里巴巴合作启动跨境销售。不久后,Mercari将登陆淘宝和闲鱼,消费者下单后,由电商服务平台BEENOS负责代购,随后将货物发往国内。Mercari作为日本最大二手交易平台,一直以来在亚洲范围内都久负盛名,而闲鱼作为国内首屈一指的二手电商平台,二者的联合碰撞起的全新火花,能打开跨境二手电商的新链路吗?二手与跨境,电商后意识形态的新鸾凤自流量为尊的互联网商业态势席卷之后,电商在不停演变,从最初的图书到衣物综合,再到各垂直电商、社交电商…

    2022年10月4日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号