如何计算(获取)一个 html 元素的位置。offsetTop
并offsetLeft
给出一个相对值(并不总是来自[x=0,y=0]
原点的报告)。谷歌给出了一个“未完成”的版本http://javascript.ru/ui/offset。
不是“如何在滚动过程中动态确定元素相对于其父元素的当前位置”,而是如何获取相对于页面内容左上角的绝对坐标。
第二个问题又是“确定一个元素相对于其父元素的当前位置”,相对于页面内容左上角的绝对坐标。
有必要将元素“悬挂”到当前布局(以便在某个元素上/附近显示提示、消息、广告等),如下所示:
document.getElementById("act_holder").style.position= "absolute";
document.getElementById("act_holder").style.display = "block";
document.getElementById("act_holder").style.top =
(getOffset(document.getElementById("act_hlp")).top - 75 ) + "px";
document.getElementById("act_holder").innerHTML = "элемент занят";
使用时absolute
,需要相对于左上角的坐标。
这是从 javascript.ru 收集到堆的代码。
几点评论:getBoundingClientRect函数引起争议,mozilla引用
那些。已经考虑到文档的滚动和缩进,如果您需要相对于工作表坐标系原点(文档的左上角)的坐标,则必须减去它们。
getBoundingClientRect
如果满足两个条件,此函数将给出正确的结果:1)滚动位置为零(通常发生在开头),2)如果文档(正文)缩进未设置或设置为零。由于并不总是满足这些条件,因此必须使用更复杂的解决方案。我自己补充一下,如果使用报表系统,
position=fixed
它getBoundingClientRect
会给出适合这个报表系统的坐标,但是固定很少使用,因为当滚动位置发生变化时,屏幕上的位置会被保存并且元素会“漂浮”。对于绝对和静态,您将不得不重新计算坐标。相对系统只是相对坐标,在某些情况下可以使用。点击任意元素获取数据说明你还想获取什么绝对坐标???很可能我会明白......全屏观看更好
如果使用 jQuery,那么一切都很简单:
将始终有效,除了固定元素。这是文档边缘的位置 - 页面内的位置。