Le problème pour moi était le fait que j'étais dans un div avec une barre de défilement et que je devais pouvoir prendre en compte la partie cachée jusqu'à l'élément Root.
Si j'utilise ".offset()", cela me donne des valeurs erronées, car cela ne prend pas en compte la partie cachée de la barre de défilement qui est relative au document.
Cependant, j'ai réalisé que la propriété ".offsetTop" relative à son premier parent positionné (offsetParent) était toujours correcte. J'ai donc créé une boucle pour aller récursivement à l'élément Root en additionnant les valeurs de ".offsetTop" :
J'ai créé ma propre fonction jquery pour ça :
jQuery.fn.getOffsetTopFromRootParent = function () {
let elem = this[0];
let offset = 0;
while (elem.offsetParent != null) {
offset += elem.offsetTop;
elem = $(elem.offsetParent)[0];
if (elem.offsetParent === null) {
offset += elem.offsetTop;
}
}
return offset;
};
Vous pouvez utiliser la même chose avec ".offsetLeft" je suppose...
Si vous voulez obtenir la position d'un élément par rapport à un autre élément pour répondre à la question :
let fromElem = $("#fromElemID")[0];
let offset = 0;
while (fromElem.id.toUpperCase() != "toElemID".toUpperCase()) {
offset += fromElem.offsetTop;
fromElem = $(fromElem.offsetParent)[0];
}
return offset;
Un élément (offsetParent) est dit positionné s'il possède un attribut CSS de position relative, absolue ou fixe.
0 votes
Essayez de changer la position de votre div d'habillage en position relative dans le CSS. [ stackoverflow.com/questions/2842432/