检索HTML元素的位置(X,Y)

我想知道如何在JavaScript中获取HTML元素(如imgdiv的X和Y位置。


正确的方法是使用element.getBoundingClientRect()

var rect = element.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);

只要您可能关心,并且最终在CSSOM视图中标准化了,Internet Explorer就已经支持这一功能。 所有其他浏览器很久以前就采用了它。

某些浏览器也会返回高度和宽度属性,虽然这是非标准的。 如果您担心较旧的浏览器兼容性,请检查此答案的修订版以获得优化的降级实施。

element.getBoundingClientRect()返回的值是相对于视口的。 如果你需要它相对于另一个元素,只需从另一个矩形中减去一个矩形:

var bodyRect = document.body.getBoundingClientRect(),
    elemRect = element.getBoundingClientRect(),
    offset   = elemRect.top - bodyRect.top;

alert('Element is ' + offset + ' vertical pixels from <body>');

库有一定的长度以获得元素的精确偏移量。
这里有一个简单的功能,可以在我尝试过的每种情况下完成这项工作。

function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x };
}
var x = getOffset( document.getElementById('yourElId') ).left; 

这对我有效(从最高的投票答案修改):

function getOffset(el) {
  el = el.getBoundingClientRect();
  return {
    left: el.left + window.scrollX,
    top: el.top + window.scrollY
  }
}

使用这个我们可以打电话

getOffset(element).left

要么

getOffset(element).top
链接地址: http://www.djcxy.com/p/299.html

上一篇: Retrieve the position (X,Y) of an HTML element

下一篇: Convert HTML + CSS to PDF with PHP?