Und wieder was um den Wahsaga auf seine lieblings-Palme zu bringen: Wie schaff ich's denn jetzt dass er die größe kriegt bevor das DIV mittels appendChild ins DOM gehängt wurde... . Klingt nach 'gar nicht' oder?. Möglichkeit die mir dazu einfällt ist das Teil irgendwie zu verstecken und dann bei bedarf kleinmachen und aufscrollen zu lassen. MooFX macht es auch in der Art nur frag ich mich noch wie ich's geeignet verstecke, wenn ich msgBox.style.visibility = "hidden"; benutze reserviert er trotzdem den Platz... .
[JavaScript] Höhe eines DIVs herausfinden
Einklappen
X
-
-
Wie schaff ich's denn jetzt dass er die größe kriegt bevor das DIV mittels appendChild ins DOM gehängt wurde... . Klingt nach 'gar nicht' oder?
Klar kannst du es erst mal irgendwo außerhalb des sichtbaren Bereiches positionieren, dann seine Höhe messen - und dann an eine sichtbare Stelle "verschieben".
Mein Vorschlag wäre eher, ganz simpel zwei Elemente ineinander zu verschachteln.
Das äußere bekommt erst mal Höhe 0 und overflow:hidden.
Die des inneren kann man jetzt problemlos ermitteln, sobald man beide ins Dokument eingehängt hat.
Und dann wird nur noch die Höhe es äußeren Elements schrittweise so lange vergrößert, bis die des inneren erreicht ist, es also voll sichtbar ist.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Gut, jetzt hab ich nur noch ein Problem mit der resize-Funktion:
Code:function resizeDivTo(div_id, div_height) { var div = document.getElementById(div_id); for(var i = div.offsetHeight; i < div_height; i++) { window.setTimeout("div.offsetHeight = i;", 500); } }
Kommentar
-
Untauglicher Ansatz.
- setTimeout erwartet eine Funktionsreferenz, oder einen Funktionsaufruf oder einen als Funktion interpretierbaren Code-String als Parameter. M.E. müsstest du hier also schon mit sog. "Closures" arbeiten, wenn du das auf diese Weise machen willst - sonst ist i zum Zeitpunkt der Ausführung gar nicht mehr bekannt.
- x mal setTimeout von 500 Millisekunden auf einmal - dir ist klar, dass das ganze dann "ziemlich fix" vonstatten gehen wird ...?
Ich würde einfach eine Funktion, die die Höhe verändert, sich so lange per setTimeout wieder selbst aufrufen lassen, wie die Zielhöhe noch nicht erreicht ist.
Oder, alternativ, mit setInterval arbeiten - und es beim erreichen der Zielhöhe dann wieder clearen.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Ich würde einfach eine Funktion, die die Höhe verändert, sich so lange per setTimeout wieder selbst aufrufen lassen, wie die Zielhöhe noch nicht erreicht ist.
Code:function resizeDivTo(div_id, div_height) { var div = document.getElementById(div_id); if(div.offsetHeight < div_height) { div.offsetHeight++; window.setTimeout("resizeDivTo(div_id, div_height);", 500); } }
Kommentar
-
So
Code:function resizeDivTo(div_id, div_height) { var div = document.getElementById(div_id); if(div.offsetHeight < div_height) { var h = div.offsetHeight + 1; div.style.height = h+'px'; window.setTimeout("resizeDivTo(div_id, div_height);", 1000); } }
Kommentar
Kommentar