Finding an Element's Location Relative to the Page Origin
An element has convenient CSSOM properties to find its location relative to the element's
offsetParent or the viewport. There is currently no CSSOM property to directly locate an element based on the page (document) origin (for instance, similar to the
pageX/
pageY properties for mouse events).
A common solution to find the element's location relative to the page involves summing the value of
offsetTop with the element's
offsetParent.
offsetTop and so on until
offsetParent returns null. (Naturally,
offsetLeft is used for horizontal positioning.) Avoid this practice for the following reasons:
- The offsetTop value does not include the width of the offsetParent's border. This can lead to slight misalignments when any element in the offsetParent chain has a border style applied.
- These repeated summations can contribute to slow performance when offsetParent chains are long.
With Internet Explorer 9, it is better to use the newly added
window.pageYOffset property (
window.pageXOffset for horizontal scenarios).
The recommended practice to find an element's vertical location from the page's origin is to add the element's getBoundingClientRect().top property to the
window.pageYOffset value. (
getBoundingClientRect().
left +
window.pageXOffset for the horizontal location.) This yields the correct result avoiding both pitfalls previously shown.
Partager