Coding-Schatzkästlein
| |||||||||||||||||||||||||||||||
| Zusammenfassung | ||||
|---|---|---|---|---|
| Name: |
PageBlending
| |||
| Aufgabe: |
Funktion, um die Seitenüberblendeffekte des IEs mit einer leichteren Syntax, erweiterten Möglichkeiten und unter Vermeidung der typischen Mängel zu nutzen.
| |||
| Benötigt: |
JavaScript 1.1 (ungesichert)
| |||
| Beispiel: |
Testseiten
| |||
| Download: |
blending.zip
| |||
Seit der Version 4.0 bietet der Internet Explorer Filter-<meta http-
erreicht man z.B., daß diese Seite binnen 2 Sekunden sanft über die
vorhergehende Seite eingeblendet wird. Der META-<meta http-
bewirkt, daß beim Verlassen dieser Seite innerhalb von 3 Sekunden mit
Übergangseffekt 12 (punktweises Ersetzen) die neue Seite erscheint.
Soweit die Theorie. Leider gerieten die Umsetzungen in den Browsern recht
fehlerhaft. Der IE 4.x macht nur einen einfachen Effekt, der IE 5.0 nur
kurzzeitige Darstellungsfehler beim Laden und der IE 5.5 führt die Übergänge
zwar aus, interpretiert jedoch die Zeitangabe ggf. falsch, was zu immens nervigen
Wartezeiten führen kann (ein Dezimalpunkt wird ignoriert, d.h. bei einer
Angabe von 2.5 Sekunden dauert der Übergang 25 Sekunden).
Ein weiteres Problem: Normalerweise kann man dem Browser zusehen, wie er die
nächste Seite aufbaut. Insbesondere Surfer mit langsamen Modems sind dies
gewohnt, können sie sich doch schon während der längeren Ladezzeit auf der
Seite orientieren. Mit den Überblendeffekten gibt es diese Möglichkeit
jedoch nicht mehr: Die neue Seite lädt im Hintergrund, und erst wenn der
Ladevorgang komplett beendet, die neue Seite komplett aufgebaut wurde, fängt
der Browser an, die neue Seite anzuzeigen.
Und ärgerlicherweise muß man sich wahlweise für den fließenden Seitenübergang
(BlendTrans) oder für einen Übergangseffekt (RevealTrans)
entscheiden (letzterer bietet die Auswahl aus 23 Effekten, sowie auch einer
zufälligen Auswahl aus diesen) - natürlich durch Aktualisierung der betreffenden
HTML-
Um den genannten Mängeln abzuhelfen, habe ich die Funktion PageBlending
geschrieben. Sie sorgt ggf. dafür, daß der Effekt
agt_ieVersion);agt_speed);Außerdem bietet die Funktion die Vorteile, daß
Ein Nachteil sei allerdings auch nicht verschwiegen: Mittels JavaScript
eingefügt, funktioniert ausschließlich die Variante Page-,
nicht jedoch Page-. D.h., die Effekte können nur beim
Verlassen der jeweiligen Seite wirken, nicht jedoch beim Betreten (es sei denn,
die vorherige Seite hat einen Effekt mit Page- definiert ;-)).
Der benötigte Funktionsaufruf BlendOver(duration,effect) (das aufrufende
Script muß im HEAD der HTML-duration
(Dauer des Effekts in Millisekunden - nicht in Sekunden wie beim Original!)
und effect (der zu verwendende Effekt). Für effect kann
entweder eine Zahl zw. 0 und 23 übergeben werden (was den
Effekt-RevealTrans entspricht
- 23 ist dabei die Zufallsauswahl), oder -1 (was der
Überblendung BlendTrans entspricht, wobei dieser Effekt nunmehr
ebenfalls in der Zufallsauswahl enthalten ist), bzw. auch eine
(Komma-
Alternativ kann man aber auch Symbole übergeben. Diese Symbole sind:
" " entspricht -1: fließende Überblendung"::" entspricht 12: punktweiser Übergang"[]<-" entspricht 0: nach innen (schließend)"[]->" entspricht 1: nach außen (öffnend)"O<-" entspricht 2: nach innen (schließend)"O->" entspricht 3: nach außen (öffnend)"||->" entspricht 8: nach rechts"=_" entspricht 9: nach unten"#->" entspricht 10: nach rechts"#_" entspricht 11: nach unten"->|<-" entspricht 13: nach innen (schließend)"<-|->" entspricht 14: nach außen (öffnend)"|->" entspricht 6: nach rechts"|<-" entspricht 7: nach links"\-_" entspricht 17: nach links-"/_-" entspricht 18: nach links-"/-_" entspricht 19: nach rechts-"\_-" entspricht 20: nach rechts-"_-" entspricht 4: nach oben"-_" entspricht 5: nach unten">-" entspricht 15: nach innen (schließend)"-<" entspricht 16: nach außen (öffnend)"==" entspricht 21: horizontal"||||" entspricht 22: vertikal"*" entspricht 23: aus allen Effekten"-1,0,O<-,O->,..." (keine Entsprechung): aus Effekt-Beispiele:
BlendOver(2500,"O->") erzeugt immer einen 2,5-BlendOver(2500," ,::") erzeugt zufällig fließende oder punktweise ÜberlagerungBlendOver(2500," , ,::") dito, jedoch werden doppelt so viele fließende wie punktweise Überlagerungen verwendetBlendOver(2500,23) erzeugt einen Zufalls-BlendOver(2500,"*,O<-,O->") erzeugt zu 2/3 Kreis-BlendOver(2500,"[]->,O->,<-|->,-<") erzeugt zufällig einen der sich "öffnenden" Effektedo_blending=true; (immer ausführen)do_blending=false; (nie ausführen)do_blending=!is_online; (nur, falls die Seiten offline geladen werden - z.B. zum Testen)do_blending=(is_ie && agt_ieVersion>=5.5) (nur im IE ab Version 5.5 inkl.)do_blending=(!is_ie || (is_ie && agt_ieVersion>=5.5)); (auf jedem Browser - falls diese Funktion auch mal von einem anderen Browser als dem IE unterstützt werden sollte -, beim IE jedoch erst ab 5.5)do_blending=((!is_ie || (is_ie && agt_ieVersion>=5.5)) && agt_speed>300); (wie oben, jedoch nur bei effektiven Verbindungsgeschwindigkeiten größer als 300 KBit/s)do_blending=((!is_ie || (is_ie && agt_ieVersion>=5.5)) && lineType("DSL")); (wie oben, jedoch nur wenn mindestens die Geschwindigkeit eines DSL-
gefolgt vom Aufruf if(do_blending) { blendOver(duration,effect); } ...
|
Updates: | |
|---|---|
|
17.01.2004: |
Erweiterung: Workaround für "Dezimalpunkt-rnd() ersetzt durch rand().
|