Hallo dHTML-geschädigte, hallo Forum!
Macht nicht den Fehler, eine dHTML-Bibliothek erstellen zu wollen! TUT ES NICHT! :-)
Anfangs ist es ganz einfach. Funktion zum Ändern der Sichtbarkeit eines DIVs hier, Funktion zum absoluten Positionieren hier, alles ganz locker.
Dabei soll es aber nicht bleiben, was eine echte Clicki-Bunti-Seite werden will, braucht auch tolle clipping-Effekte. Informationen kann man doch nur rüberbringen, wenn sie in einem lustig ausrollenden Layer stecken... ;-)
Oberste Prämisse bei der Angelegenheit war Kompatibilität, und an sich bieten ja auch alle modernen Browser die nötigen Techniken; Der NS4.X kennt layers[x].clip.width und layers[x].clip.height, die übrigen kennen getElementByWasWeißIchWas.style.clip bzw. all[x].style.clip.
So weit, so schön.
Jetzt kommt der erste Pferdefuß.
Beim NS4.X hat man versäumt, die Attribute layers[x].width und layers[x].height zu implementieren. Aber warum auch, man kann ja clip.width bzw clip.height auslesen, wenn man wissen will, wie breit/hoch ein Layer ist...
Danke, ihr Netsie-Helden, jetzt muß ich von allen DIVs beim Laden diese clip.width - bzw clip.height - Werte auslesen und speichern, weil nach dem ersten clippen sonst nicht mehr zu ermitteln ist, auf welche Maße das DIV-Element zurückgeclippt werden muß, wenn ich es 'ausrollen' lassen will :-(
Das gibt nämlich sonst fehlende Ecken und Kanten.
Ok, das ginge ja noch. Sie hatten bei der Markteinführung halt zu wenig Zeit. Akzeptiert.
Aber Microsoft wäre nicht Microsoft, wenn sie nicht die größeren Pferdefüße hätten.
Denn wer versucht, den String in all[x].style.clip auszulesen, muß schnell feststellen, daß da nix drinsteht, wenn man nicht vorher irgendwas reingeschrieben hat :-(
Wäre es denn zuviel verlangt gewesen, hier die aktuellen Daten zu speichern? Scheinbar schon.
Also heißt es, für jedes DIV ein Flag zu defieren, das signalisiert, ob in clip schon was drin steht oder nicht (btw:man könnte auch den String untersuchen, ob er leer ist,wäre eleganter), und wenn nicht, die clipping-Maße per Fuß zu ermitteln. Leider kann man nicht einfach Breite und Höhe auslesen, weil bei Verwendung von padding und border der echte clipping-Wert größer ist als der, der in style.width bzw. style.height steht.
Man muß also noch den padding-wert mit 2 multiplizieren und zu style.width/style.height hinzuaddieren, und um dem ganzen die Krone aufzusetzen, die Breite des Randes ermitteln,zu verdoppeln und hinzuaddieren, was nicht ganz einfach ist, weil in style.borderWidth kein Pixelwert, sonder sowas wie 'thin' steht :-((
So ein Schlammassel!
Lustiger wird es, wenn man nicht nur clippen will, sondern die Größe eines Layers verändern möchte!
Denn wenn im DIV ein Element mit festen Maßen definiert ist, kann der DIV-Layer nicht kleiner werden als diese Maße. Hm, man könnte ja clippen ;-)
Netscape bietet in seinem Navigator 4.X für Größenveränderungen die Methoden resizeTo und resizeBy. Leider aktualisiert er dabei nicht die Zeilenumbrüche und Abstände. Meines Wissens gibt es hierfür kein elegantes Workaround, weder neuschreiben (document.open()...etc) noch Verschachteln von Layern sind akzeptabel für meine Bibliothek. *grummel*
Sollte tatsächlich jemand bis hier unten gelesen haben, muß ich mich mal entschuldigen, daß vielleicht nicht immer klar ist, worum es eigentlich geht, aber ich denke ich habe auch für Leute, die grade nicht 'drin' stecken, eine kleine Argumentationshilfe für kollektive Browserverteufelungen geliefert :-)
Und sollte jemand einen Ausweg aus meinen Problemen kennen, ich bin für jede Hilfe dankbar!
Schöne Grüße
Dominic