Quelle est la manière la plus simple de déterminer la position d'un élément par rapport à la fenêtre du document / corps / navigateur?
Pour le moment, j'utilise .offsetLeft/offsetTop
, mais cette méthode ne vous donne que la position par rapport à l'élément parent, vous devez donc déterminer le nombre de parents de l'élément body, pour connaître la position relative au corps / fenêtre du navigateur / position du document.
Cette méthode est également trop lourde.
javascript
dom
Einstein
la source
la source
Vous pouvez aller en haut et à gauche sans parcourir le DOM comme ceci:
la source
<html>
élément.Vous pouvez utiliser
element.getBoundingClientRect()
pour récupérer la position de l'élément par rapport à la fenêtre.Ensuite, utilisez
document.documentElement.scrollTop
pour calculer le décalage de la fenêtre.La somme des deux donnera la position de l'élément par rapport au document:
la source
document.documentElement.scrollTop
ne fonctionne pas dans Safari, utilisez à lawindow.scrollY
placeJe suggère d'utiliser
comme proposé ici au lieu du calcul manuel de l'offset via offsetLeft , offsetTop et offsetParent . comme proposé ici Dans certaines circonstances * le parcours manuel produit des résultats invalides. Voir ce Plunker: http://plnkr.co/pC8Kgj
* Lorsque l'élément est à l'intérieur d'un parent scrollable avec un positionnement statique (= par défaut).
la source
offsetLeft
etoffsetTop
je ne prends pas en compte les transformations CSS3, ce qui legetBoundingClientRect()
fait. C'est donc un cas, les résultats peuvent être invalides. Si vous en avez besoin, vous pouvez obtenir le décalage d'un élément par rapport au parent (commeoffsetLeft
) en utilisant(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
.document-offset
( Script tiers ) est intéressant et semble tirer parti des approches des autres réponses ici.Exemple:
la source
J'ai trouvé que la méthode suivante était la plus fiable pour traiter les cas de bord qui déclenchent offsetTop / offsetLeft.
la source
Pour ceux qui veulent obtenir les coordonnées x et y de différentes positions d'un élément, par rapport au document.
Usage
getCoords(document.querySelector('selector'), 'center')
getCoords(document.querySelector('selector'), 'bottom right')
getCoords(document.querySelector('selector'), 'top center')
la source
Si cela ne vous dérange pas d'utiliser jQuery, vous pouvez utiliser
offset()
function. Reportez-vous à la documentation si vous souhaitez en savoir plus sur cette fonction.la source
http://www.quirksmode.org/js/findpos.html Explique la meilleure façon de le faire, dans l'ensemble, vous êtes sur la bonne voie, vous devez trouver les décalages et parcourir l'arbre des parents.
la source