Hi auch,
Ich möchte ein einfaches, grafisches Menü, wo sich die
Grafiken beim OnMouseOver verändern und beim Anklicken eines
Menüpunktes die ON-Grafik oder auch eine andere Grafik geladen
wird und den Punkt somit hervorhebt. Praktisch dem Betrachter
signalisiert in welchem Untermenü er sich befindet. Am besten
wäre es, wenn auch der Link nach dem Drücken des Menüpunktes
inaktiv wäre aber das muss nicht unbedingt sein.
Und das ohne Frames. Dadurch wird es ein völlig anderes Problem.
Also fangen wir ganz von vorne an.
Zuallererst mal würde ich vermutlich das gesamte Preloading opfern.
Das bringt Dir wenig.
Preloading ist dann gut, wenn die Umschaltung im Navigationsmenü nahezu
keine Zeit kostet und durch das Nachladen einer Graphik essentiell
verlangsamt würde. Da Du aber keine Frames haben willst und jeder Klick
sowieso eine neue Seite anfordert, in der fast dieselben Graphiken drin
sind wie in der vorherigen, würde ich es lassen. Okay, Du verhinderst
beim ersten Mal, daß das Hovern lange dauert - dafür muß Du aber den
gesamten JavaScript-Code mit jeder einzelnen Seite immer wieder über-
tragen, weil das SSI-Include nicht separat gecached werden kann. Das
hebt sich in der Summe etwa auf.
Nun aber zum eigentlichen Problem, das m. E. gar nicht in JavaScript
lokalisiert ist, sondern im Konzept.
Jedes Deiner Dokumente lädt also via SSI seine eigene Navigation
nach, und diese soll so aussehen, daß
1. alle anderen Kapitelknöpfe klickbar und Hover-animiert sind,
2. der bereits selektierte aber beides nicht.
Das läßt sich machen, wenn Du
- entweder für jeden Navigationsbereich eine entsprechende Datei
statisch ablegst (dann brauchst Du zwar viele dieser Dateien,
nämlich für jeden Selektionszustand eine, aber sonst nichts),
- oder den entsprechenden HTML-Code dynamisch generierst.
Per CGI wäre letzteres sehr einfach; selbst per XSSI müßte es gehen.
Du kannst Deinem SSI-Include-Dokument im URL einen Parameter mitgeben,
nämlich den Namen des als präselektiert darzustellenden Buttons.
(Du weißt ja, welcher das ist, weil Du weißt, in welchem Bereich
dieses Dokument abgelegt ist.)
Also in etwa <!--#INCLUDE VIRTUAL="menu.html?pressed_button_name" --> .
*In* der INCLUDE-Datei müßtest Du diesen Parameter abgetrennt bekommen
- Du kannst mit SSI auf CGI-Environment-Variablen (z. B. den DOCUMENT_URI)
zugreifen und mit Apache-XSSI Strings-Vergleiche (oder sogar regular
expresssion matches) und bedingte Verzweigungen durchführen.
Also kannst Du den HTML-Code jeden einzelnen Button bedingt generieren:
(nachfolgend nur Semantik, keine korrekte SSI-Syntax, dafür lesbar):
if (QUERY_STRING == button_name)
then
generiere HTML-Code
- mit gedrücktem Button,
- ohne OnMouseOver,
- ohne Hyperlink
else
generiere HTML-Code
- mit ungedrücktem Button,
- mit OnMouseOver für Hover-Effekt,
- mit Hyperlink für Klick
Du brauchst gar keine JavaScript-Behandlung des gedrückten Knopfes, denn
Du willst ja gar nicht, daß dieser Button eine wirklich Funktion hat.
Und Du brauchst keine JavaScript-Verwaltung des dritten Zustands der
Graphik, weil ein Button innerhalb einer konkreten Datei nur entweder
gedrückt oder animiert sein soll, aber niemals zwischen beidem wechselt.
http://httpd.apache.org/docs/mod/mod_include.html,
besonders Flow Control Elements
Viele Grüße
Michael