Code YOU ist absolut schlecht, und ich habe einige Verbesserungen auf Pacerier der geben, so dass ich meine eigene Antwort schreiben:
function getPos(el, rel)
{
var x=0, y=0;
do {
x += el.offsetLeft;
y += el.offsetTop;
el = el.offsetParent;
}
while (el != rel)
return {x:x, y:y};
}
Wenn nur als getPos(myElem)
verwendet wird, wird die globale Position zurück. Wenn ein zweites Element als ein Argument enthalten ist (d. H. getPos(myElem, someAncestor)
), das ein Vorfahre/Elternteil des ersten ist (zumindest irgendwo in der Kette), dann gibt es die Position relativ zu diesem Vorfahren. Wenn rel
nicht angegeben ist (dh undefined
links), dann gezielt verwendet es !=
statt !==
, weil sie aufhören sollte, wenn el
zu null
bekommt und rel
ist undefined
als gut, so dass die nicht-strikte Gleichheit zweckmäßig ist, nicht ändern . Es gibt auch ein Objekt zurück, da dieses in der Verwendung etwas lesbarer ist als ein Array (und Sie können so etwas wie machen).
Dies ist abgeleitet von Pacerier Lösung, also wenn Sie upvote dies, in Betracht ziehen, upvoting seine auch.
Hallo Markus, danke für deinen Code, aber wenn die Seite einen Rand am b hat ody, die position ist nicht mehr corrent, hast du eine lösung dafür? Vielen Dank im Voraus – Johnny
Wie fügt man 'document.body.offsetLeft' und' document.body.offsetTop' zu den Rückgabewerten hinzu? – YOU
Dies sollte unabhängig von Körperrändern funktionieren. Stellen Sie jedoch sicher, dass Sie einen Standardmodus-Doctyp verwenden. In Quirks sind alle Wetten deaktiviert. – bobince