Правильный подход заключается в использовании element.getBoundingClientRect()
:
var rect = element.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);
Internet Explorer поддерживает это с тех пор, как вы, вероятно, о нем позаботитесь, и наконец он был стандартизирован в CSSOM Views . Все остальные браузеры приняли его давно .
Некоторые браузеры также возвращают свойства высоты и ширины, хотя это нестандартно. Если вас беспокоит совместимость с более старыми браузерами, проверьте исправления этого ответа для оптимизированной, унизительной реализации.
Значения, возвращаемые element.getBoundingClientRect()
, относятся к области просмотра. Если вам это нужно относительно другого элемента, просто вычтите один прямоугольник из другого:
var bodyRect = document.body.getBoundingClientRect(),
elemRect = element.getBoundingClientRect(),
offset = elemRect.top - bodyRect.top;
alert('Element is ' + offset + ' vertical pixels from <body>');