Obtenir la position/position de l'élément par rapport à un conteneur parent?
Je suis habitué à travailler avec jQuery. Dans mon projet actuel, cependant je utiliser zepto.js. Zepto n'est pas un position()
méthode comme le fait jQuery. Zepto est livré uniquement avec offset()
.
Une idée de comment je peux récupérer le décalage d'un conteneur par rapport à un parent avec pure js ou avec Zepto?
Vous devez vous connecter pour publier un commentaire.
element.offsetLeft
etelement.offsetTop
sont de la pure propriétés javascript pour la recherche d'un élément de la position à l'égard de sesoffsetParent
; étant le plus proche parent de l'élément à une position derelative
ouabsolute
Sinon, vous pouvez toujours utiliser Zepto pour obtenir la position d'un élément ET sa mère, et il suffit de soustraire les deux:
Cela a l'avantage de vous donner le décalage d'un enfant par rapport à son parent, même si le parent n'est pas positionné.
static
ne sont pas compensés parents.en pur js suffit d'utiliser
offsetLeft
etoffsetTop
propriétés.Exemple de violon: http://jsfiddle.net/WKZ8P/
JS:
CSS:
HTML:
p.offsetTop + p.parentNode.offsetTop
Vous pourriez conclure dans une fonction récursive appel beaucoup comme PPK proposé il y a quelques années. Vous pourriez modifier la fonction de transmettre le nombre de niveaux à monter ou d'utiliser un sélecteur pour imiter$(selector).parents(parentSelector)
. Je préfère cette solution car le zepto application ne fonctionne que sur les navigateurs supportantgetBoundingClientsRect
- dont certains mobiles ne le font pas.getBoundingClientsRect
a été largement pris en charge... si quelqu'un sait qui mobiles ne le supporte pas, je serais intéressé (pouvez pas trouver n'importe quel support de table pour les mobiles à ce sujet).$(this).offset().left
àthis.offsetLeft
.jQuery.position()
comportement à l'intérieur d'une 3d transformé parent, je vous remercie beaucoup!J'ai fait comme ça dans Internet Explorer.
===================
vous pouvez l'appeler comme cela
Je me concentre sur IE uniquement que par mon accent, mais des choses peuvent être faites pour les autres navigateurs.
Ajouter le décalage de l'événement à l'élément parent de décalage pour obtenir le décalage absolu de la position de l'événement.
Un exemple :
Lorsque la cible de l'événement n'est pas l'élément qui le cas a été enregistré, il ajoute le décalage de la mère à l'événement en cours de décalage pour le calcul de la "Absolue" de la valeur de décalage.
Selon Mozilla Web de l'API: "La HTMLElement.offsetLeft propriété en lecture seule retourne le nombre de pixels que le coin supérieur gauche de l'élément courant est décalé sur la gauche à l'intérieur de la HTMLElement.offsetParent nœud."
Cela se produit principalement lors de l'enregistrement d'un événement sur un parent qui est contenant plusieurs enfants, par exemple: un bouton avec un intérieur icône ou le texte de plage, un
li
élément à l'intérieur des travées. etc...Exemple
Ainsi, si nous avons un enfant de l'élément avec un id de "l'enfant de l'élément" et nous voulons avoir un c'est à gauche/en haut de la position relative d'un élément parent, dire un div qui avait une classe de "élément-parent", nous aimerions utiliser ce code.
Plugin Enfin, pour la mise en plugin (avec quelques notes expalaining ce qui se passe):
Est sûr, c'est facile avec de la pure JS, il suffit de faire ce travail pour les fixes et animées HTML 5 panneaux de trop, je l'ai fait et essayez ce code et il fonctionne pour tous les brower (inclure IE 8):
J'ai une autre Solution. Soustraire parent valeur de la propriété de l'enfant la valeur de la propriété