Ottogal: Bildwechsel

Salve!

Ich komme mit dem dynamischen Ändern eines Bildes nicht klar.
Es existiert ein Array Dias von Images, das durch eine preload-Funktion
gefüllt wurde, also
     Dias[0] = new Image(); Dias[0].src='Bild0.jpg';  usw.

Das Bild soll in einem <div>-Layer mit id="Leinwand" im Zweitfenster
angezeigt werden:
    <div id='Leinwq'>
    <img src="Bild0.jpg" width="720" height="540" alt="Leinwand">
    </div>

Nun habe ich eine Browser-abhängige Funktion, die den <div>-Layer
als Objekt zurückgibt:

var dom, op, ie, n4 = false;

function dhtml_init()  {
      op = (window.opera)?true:false;
      ie = (!op && document.all)?true:false;
      n4 = (!op && document.layers)?true:false;
      dom = (document.getElementById)?true:false;
    }

function dynob(ID)  {
      if (dom) {
        return(document.getElementById(ID));
      }
      else {
        if (ie) { return(document.all[ID]);
        }
 else
          if (n4) {
            return(document.layers[ID]);
          }
      }
    }

Und nun dachte ich - wahrscheinlich etwas naiv - dass ich (zunächst mal für
die Browser, die document.images verstehen) den Bildinhalt mit

dynob('Leinwand').images[0].src = Dias[1].src;

ändern könnte. Ich bekomme aber die Meldung, dass images kein Objekt bzw. null sei.

Wer klärt mich auf?
Vielen Dank

Ottogal

  1. Hallo Ottogal,

    ich habe ein ähnliches Problem, jedoch noch keine Lösung.

    Willst Du nur das eine Bild immer ändern? Wenn ja kannst Du es ja mal über das Namen-Attribut versuchen. Das könnte evtl. gehen.

    <div id='Leinwq'>
        <img src="Bild0.jpg" name="mein_bild" width="720" height="540" alt="Leinwand">
        </div>

    dynob('Leinwand').mein_bild.src = Dias[1].src

    Ist nur eine Idee, die ich jetzt nicht getestet habe.

    Gruss,
    Alex

    1. Hallo Alex,

      Willst Du nur das eine Bild immer ändern?

      Wenn ja kannst Du es ja mal über das Namen-Attribut versuchen.

      Ja, es ist immer dasselbe Bild. Mit name hab ichs auch schon vergeblich versucht.
      Danke jedenfalls

      Ottogal

  2. moin

    angezeigt werden:
        <div id='Leinwq'>
        <img src="Bild0.jpg" width="720" height="540" alt="Leinwand">
        </div>

    dynob('Leinwand').images[0].src = Dias[1].src;

    die Funktion dynob (so, wie du sie gemacht hast) sucht nach Objekten mit einer vergebenen ID. In deinem HTML-Code hat nur das div eine ID, nämlich "Leinwq". Damit wird dynob('Leinwand') nichts finden und logischerweise den Fehler erzeugen.
    Lösung:
    (a) dynob('Leinwq').images[0].src = Dias[1].src;

    (b) <img src="Bild0.jpg" width="720" height="540" alt="Leinwand" id="Leinwand"> und dann einfach
    dynob('Leinwand').src = Dias[1].src;
    dynob liefert in diesem Fall nämlich das Bild selbst

    1. Hallo Vimes,

      sorry, das war ne Schlamperei von mir: Natürlich sind die IDs im <div> und
      im Aufruf von dynob gleich (ich habs bloß lesbarer machen wollen und an
      einer Stelle die Anpassung vergessen).

      dynob('Leinwand').src = Dias[1].src;
      dynob liefert in diesem Fall nämlich das Bild selbst

      Das versteh ich nun nicht: Dynob liefert doch das <div> als Object, in dem
      das <img> drin enthalten ist; und src ist doch ein Attribut des <img> und
      nicht des <div> !(?)

      Aber ich probiers mal aus. Danke!

      Ottogal

      1. moin

        Das versteh ich nun nicht: Dynob liefert doch das <div> als Object, in dem
        das <img> drin enthalten ist; und src ist doch ein Attribut des <img> und
        nicht des <div> !(?)

        Ich bin dabei davon ausgegangen, dass das <img> die id="Leinwand" hat und nicht das <div>.

        Netscape 4.7 greift auf die divs (layer) anders zu, für jedes div  gibt es ein Unterobjekt document in dem dann die Bilder "wohnen"
        Vorsicht: Netscape 4.7 kann nur mit divs mit festen Positionierungen umgehen.

        mit <div id="Leinwq"><img id="Leinwand"> ...

        kannst du dein dynob erweitern um

        if (document.layers) <- Da reagiert nur der Netscape 4.x
        {
         return document.Leinwq.document.images[0];
        }
        liefert dir das Bild als Objekt zurück.

        1. N'Abend,

          die Spezialitäten mit dem Netsi 4.7 sind mir klar, aber das ist nicht mein
          Problem, vielmehr, dass meine dynob-Funktion offenbar kein Objekt zurückgibt.

          ???

          Gute Nacht
          Ottogal

    2. Hallo nochmal,

      habs mal mit

      dynob('Leinwand').src = Dias[1].src;

      probiert. Der Explorer 5 meldet dann "src ist Null oder kein Objekt".

      Bei meinem ursprünglichen
          dynob('Leinwand').images[0].src = Dias[1].src;
      meldet nach der Eingabe von "javascript:" der Netsi 4.7
      "dynob has no porperties", bei Mozilla heißt es
      "dynob('Leinwand') has no porperties".

      Irgendwie hab ich da die Logik der Objekte noch nicht durchschaut...

      Gruß
      Ottogal