Klaus Junge: Rollover-Images funktionieren nicht mit Netscape

Beitrag lesen

Hallo Flo,

Wer kann mir sagen warum dieses Script...

sagen kann ich Dir das zunächst nicht, aber vielleicht kriegt man das raus.
Also Schritt für Schritt.
Da gibt es ein BODY-Tag. Etwas umgestellt sieht der dann so aus:

<BODY
  background=""
  bgColor=#b7b7d4
  leftMargin=0
  topMargin=0 ;
  marginheight="0"
  marginwidth="0"
  onload="MM_preloadImages('Bilder/rollovers/abouton.gif',   '#929359797630');
          MM_preloadImages('Bilder/rollovers/produkton.gif', '#929359828990');
          MM_preloadImages('Bilder/rollovers/systemon.gif',  '#929359844700');
          MM_preloadImages('Bilder/rollovers/newson.gif',    '#929359858100');
          MM_preloadImages('Bilder/rollovers/serviceon.gif', '#929359873100');
          MM_preloadImages('Bilder/rollovers/branchenon.gif','#929979030680')">

Etwas 'uneinheitlich', Werte mal mit Gänsefüßchen, mal ohne und
noch mit einem Semikolon dazwischen...
Welcher Browser geht wie krüsch damit um?
Vielleicht weß jemand darauf eine Antwort.

Wichtiger für das Funktionieren ist aber, daß onload für jedes Bild die
Funktion MM_preloadImages() mit zwei Parametern aufgerufen wird.
Der erste Parameter dürfte klar sein, ich nehme jedenfalls an, daß das
Deine Bilder sind. Die Namen hören alle mit 'on' auf, woraus ich
schließe, daß es die Zustände für onMouseover sind.
Naja, ist ja wohl auch trivial, die Anfangsbilder werden ja mit der
Endung 'off' unten in den Ankern referenziert.
Der zweite Parameter ist mir unklar. Jeweils eine ellenlange Zahl,
vorne immer gleich. Aus der Raute schließe ich, daß sie als Hex-Zahl
zu interpretieren ist. Mal sehen.

Tja, dann gibt es noch diese Funktion:

function MM_preloadImages()
{ //v2.0
  if (document.images)
     {
      var imgFiles = MM_preloadImages.arguments;
      if (document.preloadArray==null)
          document.preloadArray = new Array();
          var i = document.preloadArray.length;
          with (document)
            for (var j=0; j<imgFiles.length; j++)
              if (imgFiles[j].charAt(0)!="#")
                 {
                  preloadArray[i] = new Image;
                  preloadArray[i++].src = imgFiles[j];
                 }
     }
}

Zunächst fällt mir auf, daß die Klammern leer sind, obwohl Parameter
übergeben werden. Bei anderen 'Sprachen' eine Totsünde die mit einem
Compilerfehler quitiert wird. Naja, das W3C hat sich Toleranz gewünscht.

Mit 'if (document.images)' soll wohl verhindert werden, daß der IE3
oder sonst ein älterer Browser eine Fehlermeldung ausgibt.

Mit 'var imgFiles = MM_preloadImages.arguments;' wird zunächst mal
eine Variable namens 'imgFiles' definiert und auf den Wert
'MM_preloadImages.arguments' gesetzt. Hmm, den gibt es doch noch garnicht.
Ob der sich damit schon ein Objekt baut? Mal sehen.

Dann, mit 'if (document.preloadArray==null) document.preloadArray = new Array();'
schaut er ob es ein Array 'preloadArray' noch nicht gibt und macht es sich
gegebenenfals mit 'document.preloadArray = new Array();'.
Anschließend deklariert er sich eine Variable i in der die Länge dieses
Arrays drinsteht: 'var i = document.preloadArray.length;'

Dann kommt eine Schleife, von Null bis Arraylänge von imgFiles.
imgFiles hatte er sich oben als Variable deklariert. Hmm.

Nun rödelt er das Array also durch und schaut bei jedem [j] nach
ob der Inhalt NICHT mit der Raute anfängt, also anzunehmen ist, daß da
ein String mit einer Dateireferenz=Name drinsteht.
Ist also keine Raute drin, dann kommen die beiden klassischen Befehle
für das Vorladen von Bildern, also erstmal einen neuen Eintrag definieren
und dann die Zuweisung der Quelle.

Um ehrlich zu sein, durch diese Funktion bin ich nun einmal durch und
weiß eigentlich nicht mehr als daß sie im Prinzip unter irgendwelchen
Umständen das klassische Bildervorladen macht. Da hab ich wohl noch
einiges zum Grübeln.

Da Dich dieses Thema ja nun schon seit Monaten umtreibt und Du anscheinend
nicht weiterkommst sollst Du das Posting auch erhalten, aber eigentlich ist
es eher was für die Rundablage.

Vielleicht hat ja sonst jemand bessere analytische Fähigkeiten.

Klaus