Quelle est la bonne façon d'obtenir la position d'un élément sur la page par rapport à la fenêtre (plutôt qu'au document). jQuery.offset
la fonction semblait prometteuse:
Obtenez les coordonnées actuelles du premier élément, ou définissez les coordonnées de chaque élément, dans l'ensemble des éléments correspondants, par rapport au document.
Mais c'est relatif au document. Existe-t-il une méthode équivalente qui renvoie les décalages par rapport à la fenêtre?
Réponses:
Regardez dans le plugin Dimensions, en particulier
scrollTop()
/scrollLeft()
. Des informations peuvent être trouvées sur http://api.jquery.com/scrollTop .la source
Le moyen le plus simple de déterminer la taille et la position d'un élément est d'appeler sa méthode getBoundingClientRect () . Cette méthode renvoie les positions des éléments dans les coordonnées de la fenêtre. Il n'attend aucun argument et renvoie un objet avec les propriétés left, right, top et bottom . Les propriétés left et top donnent les coordonnées X et Y du coin supérieur gauche de l'élément et les propriétés right et bottom donnent les coordonnées du coin inférieur droit.
element.getBoundingClientRect(); // Get position in viewport coordinates
Pris en charge partout.
la source
getBoundingClientRect is not a function
$('#myElement')[0].getBoundingClientRect().top
(ou toute autre position)Voici deux fonctions pour obtenir la hauteur de la page et les montants de défilement (x, y) sans utiliser le plugin de dimensions (gonflées):
la source
jQuery.offset
doit être combiné avecscrollTop
etscrollLeft
comme indiqué dans ce diagramme:Démo:
la source
Voici une fonction qui calcule la position actuelle d'un élément dans la fenêtre:
Les valeurs de retour sont calculées comme ceci:
Usage:
Démo:
la source
J'ai trouvé que la réponse de cballou ne fonctionnait plus dans Firefox à partir de janvier 2014. Plus précisément,
if (self.pageYOffset)
cela ne s'est pas déclenché si le client avait fait défiler vers la droite, mais pas vers le bas - parce que0
c'est un nombre faux. Cela n'a pas été détecté pendant un certain temps car Firefox supportaitdocument.body.scrollLeft
/Top
, mais cela ne fonctionne plus pour moi (sur Firefox 26.0).Voici ma solution modifiée:
Testé et fonctionnant sous FF26, Chrome 31, IE11. Fonctionne presque certainement sur les anciennes versions de tous.
la source