Bildwechsel
Ottogal
- javascript
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
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
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
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
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
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.
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
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