JS获取控件在屏幕上的坐标

本文详细解释了HTML控件的位置与尺寸属性,包括offsetTop、offsetLeft、offsetWidth、offsetHeight等属性的含义及用法,并对比了它们与style属性的区别。

假设 obj 为某个 HTML 控件。
obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。
obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。
obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。
obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。
我们对前面提到的“上方或上层”与“左方或上层”控件作个说明。

例如:
<div id="tool">
      <input type="button" value="提交">
      <input type="button" value="重置">
</div>

“提交”按钮的 offsetTop 指“提交”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。
“重置”按钮的 offsetTop 指“重置”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。

“提交”按钮的 offsetLeft 指“提交”按钮距“tool”层左边框的距离,因为距其左边最近的是 “tool” 层的左边框。
“重置”按钮的 offsetLeft 指“重置”按钮距“提交”按钮右边框的距离,因为距其左边最近的是“提交”按钮的右边框。

offsetTop 可以获得 HTML 元素距离上方或外层元素的位置,style.top 也是可以的,二者的区别是:

一、offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。

二、offsetTop 只读,而 style.top 可读写。

三、如果没有给 HTML 元素指定过 top 样式,则 style.top 返回的是空字符串。

offsetLeft 与 style.left、offsetWidth 与 style.width、offsetHeight 与 style.height 也是同样道理。


scrollHeight: 获取对象的滚动高度。  
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置  
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标

event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标  
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量  

以上主要指IE之中,FireFox差异如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width - border
clientHeight = height - border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

 

转载出处:http://www.i1981.com/blog/article.asp?id=339

在网页端程序中,通常可以使用 JavaScript 来获取控件(DOM 元素)的屏幕坐标。以下是几种常见的方法: ### 使用 `getBoundingClientRect()` 方法 `getBoundingClientRect()` 方法返回一个 DOMRect 对象,该对象包含了元素的大小及其相对于视口的位置。结合 `window.scrollX` 和 `window.scrollY` 可以计算出元素相对于屏幕的绝对坐标。 ```javascript // 获取元素 const element = document.getElementById('yourElementId'); // 获取元素相对于视口的位置 const rect = element.getBoundingClientRect(); // 获取滚动偏移量 const scrollX = window.scrollX || window.pageXOffset; const scrollY = window.scrollY || window.pageYOffset; // 计算元素相对于屏幕的绝对坐标 const screenX = rect.left + scrollX; const screenY = rect.top + scrollY; console.log(`元素的屏幕坐标:(${screenX}, ${screenY})`); ``` ### 使用 `offsetTop` 和 `offsetLeft` 属性 `offsetTop` 和 `offsetLeft` 属性可以获取元素相对于其 offsetParent 的位置,通过递归计算可以得到元素相对于文档的位置。 ```javascript function getElementScreenPosition(element) { let x = 0; let y = 0; while (element) { x += element.offsetLeft; y += element.offsetTop; element = element.offsetParent; } // 考虑滚动偏移量 const scrollX = window.scrollX || window.pageXOffset; const scrollY = window.scrollY || window.pageYOffset; const screenX = x - scrollX; const screenY = y - scrollY; return { screenX, screenY }; } // 获取元素 const element = document.getElementById('yourElementId'); // 获取元素的屏幕坐标 const position = getElementScreenPosition(element); console.log(`元素的屏幕坐标:(${position.screenX}, ${position.screenY})`); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值