Joachim: Nachhilfe beim Imageobjekt

hallo,
koennt Ihr mir etwas Nachhilfe beim Imageobjekt geben?
Also, wenn ich Bilder wie folgt vorlade:

kopfbild=new Array();
for (i =1;i<=10;i++)
{
   kopfbild[i] = new Image();
   kopfbild[i].src = "kopf" + i + ".jpg";    
}

Um anschliessend die Bilder zu wechseln funktioniert_das_nicht (NC 4.5):

function wechsel1(a1,a2)
{
document.images[a1].src=a2.src;
}

a1 = 0 (erstes Bild) a2 = kopfbild3

lade ich die Bilder wie folgt vor:

kopfbild1 = new Image();
kopfbild1.src = "kopf1.jpg";
kopfbild2 = new Image();
kopfbild2.src = "kopf2.jpg";
kopfbild3 = new Image();
kopfbild3.src = "kopf3.jpg";
usw. bis 10

funktioniert es. Erzeugt denn das Array keine Image-Objekte?
Wenn ich die wechsel-Funktion in Verbindung mit dem Array so schreibe:

function wechsel1(a1,a2)
{
document.images[a1].src="kopf"+a2+".jpg";
}

also die Bild-URL eisetze, funktioniert es.
Ich begreife es nicht ganz, waere nett, wenn‚s mir mal jemand erklaeren kann.

Gruss   Joachim

  1. Hallo Joachim!

    Kein Wunder, im ersten Fall legst Du ein Array von Images an. Jedes Element wird mit kopfbild[i] angesprochen. In der Zuweisung der .src-Eigenschaft machst Du das ja auch ganz richtig:

    kopfbild=new Array();
    for (i =1;i<=10;i++)

    »»  {

    kopfbild[i] = new Image();
       kopfbild[i].src = "kopf" + i + ".jpg";

    »»  }

    Bei

    kopfbild1 = new Image();
    kopfbild1.src = "kopf1.jpg";
    usw. bis 10

    dagegen hast Du 10 verschiedene, voellig voneinander unabhaengige Variablen, die zufaellig sehr aehnliche Namen haben.

    Mit

    function wechsel1(a1, a2) {

    »»    document.images[a1].src=a2.src;

    }
    a1 = 0 (erstes Bild) a2 = kopfbild3   <-- Du meinst, Du rufst wechsel(0, kopfbild3); auf?

    sprichst Du die .src-Eigenschaft des uebergebenen Parameters as an, welcher ein Kopie von kopfbild3 ist. (Ich meine, a2 ist eine Kopie der Variable (genauer: Objektinstanz) kopfbild3, was nicht gerade sehr sauber ist. Besser waere, nur die .src-Eigenschaft zu uebergeben, also
    function wechsel1(a1, a2s) { document.images[a1].src=a2s; }     und mit
    wechsel(0, kopfbild3.src);  aufrufen.)

    Wenn Du dieselbe Funktion mit dem Array verwenden willst, muesstest Du einfach
    wechsel(0, kopfbild[3]);  aufrufen. Aber ist wie gesagt nicht so toll, ein ganzes Image-Objekt als Argument an eine Funktion zu uebergeben.

    Wenn ich die wechsel-Funktion in Verbindung mit dem Array so schreibe:

    function wechsel1(a1,a2) {

    »»    document.images[a1].src="kopf"+a2+".jpg";

    }

    Dann musst Du aber nur  wechsel(0, 3); aufrufen, wenn das funktionieren soll.

    Am besten ist auf jeden Fall eine Funktion, der nur die Bildnummer uebergeben werden muss. Fuer das Array waere das
    function wechsel(a1, a2) {
        document.images[a1].src = kopfbild[a2].src;  // siehste, doc.images ist auch nur so ein Bilderarray
    }
    Fuer die einzelnen Variablen:
    function wechsel(a1, a2) {
        document.images[a1].src = eval("kopfbild" + a2 + ".src");  // bin mir nicht ganz sicher
    }

    Oder die von Dir gewaehlte Version mit der direkten URL-Angabe. Aufruf ist in jedem Fall
    wechsel(0, 3); .

    Bye by Calocybe

    1. Hallo Calocybe,
      hast Dir auf jeden Fall mal wieder ein Bier verdient, ich glaube, ich habe es kapiert :-)
      Mit den Sprachelementen gehe ich halt bisweilen noch sehr amateurhaft-gschlampert um...

      Oder die von Dir gewaehlte Version mit der direkten URL-Angabe. Aufruf ist in jedem Fall
      wechsel(0, 3)

      Klar, hatte ich auch (nur nicht im posting)

      Also, gute Nacht und guten Morgen und Gruss   Joachim