Geschwindigkeit beim Bestimmen der absoluten Element Position
Katharina
- javascript
0 minicrispie0 Heiko J.
Hallo,
ich habe in meinem Code eine Funktion, die die relative Position eines Elements zur linken oberen Ecke des Anzeigebereichs ausrechnet und dabei auch Angaben wie position:relative und position:absolute der Element Hierarchie berücksichtigt.
Der Code funktioniert wunderbar in allen von uns unterstützten Browsern (IE6+ (XP/Vista), FF1.5+ (XP/Vista/Mac), Opera9+, Safari (XP/Mac)) und das muss er natürlich auch weiterhin.
Problem von dieser Funktion ist lediglich die Geschwindigkeit. Da alle Eltern Element der Hierarchie durchlaufen werden (und wir viel mit position arbeiten müssen), dauert es zu lange sie auszuführen. Ich soll jetzt prüfen, ob man die Performance davon verbessern kann.
Habt Ihr eine Idee?
Hier ist der Code:
function findAbsElPos(el)
{
var orig = el;
var cureft = 0;
var curtop = 0;
if (el.offsetParent) {
curleft = el.offsetLeft;
curtop = el.offsetTop;
while (el = el.offsetParent) {
curleft += el.offsetLeft;
curtop += el.offsetTop;
}
}
return {x:curleft, y:curtop};
};
Danke schonmal für Eure Hilfe,
Katharina
Hallo,
nach deinem skript geht nicht hervor, wozu du die variable "orig" benötigst.
aber ansonsten wüsste ich auch nicht wie man das schneller macht ;)
MfG. Christoph
Hi,
nach deinem skript geht nicht hervor, wozu du die variable "orig" benötigst.
Gleiches gilt für "cureft", was "curleft" heißen müsste.
mfG,
steckl
Hi
nach deinem skript geht nicht hervor, wozu du die variable "orig" benötigst.
Gleiches gilt für "cureft", was "curleft" heißen müsste.
cureft ist nur ein Tippfehler hier im Forum, es heißt natürlich curleft. orig wird mittlerweile nicht mehr benutzt und kann entfallen. curleft / curtop wird natürlich benötigt, es ist ja der Rückgabewert. Ich addiere hier die Positionen der Elternelemente auf um position:absolute zu berücksichtigen.
Grüße,
Katharina
Hallo Katharina,
ich wüsste im Moment auch keinen besseren Weg, der schneller die abs. Position ermittelt.
Aber vielleicht kannst du etwas am Ablauf verändern: Wann benötigst du die Position eines Elements? Erst wenn der Anwender eine Aktion ausgelöst hat (z.B. einen Link anklickt oder ein Formular absendet)? Dann kannst du, sobald das Dokument im Browser geladen ist (siehe Event onload) vielleicht schon vorab die Positionen der benötigten Elemente bestimmen. Natürlich nur solange sie sich nicht danach verändern.
Nur so ne Idee von mir
Gruss
Heiko J.