Bilder vorladen
Gunnar Bittersmann
- javascript
Hi,
Laden Browser alle Bilder vor, auch wenn sie nacheinander derselben Variablen zugewiesen werden?
function preload() {
for(var img, i = 0; i < arguments.length; i++) {
img = new Image;
img.src = arguments[i];
}
}
(Aufruf: onload="[code lang=javascript]preload('foo.png', 'bar.png')
"[/code])
Live long and prosper,
Gunnar
Hallo Gunnar,
Laden Browser alle Bilder vor, auch wenn sie nacheinander derselben Variablen zugewiesen werden?
Alle? Nein, nicht alle. Ein kleines Dorf im Norden Galliens...
Sorry, das war aus einem anderen Märchen. ;-)
Also im Ernst: Der Internet Explorer braucht auf jeden Fall etwas Zeit zwischen den Zuweisungen, weil die Zuweisung an img.src nicht sofort das Anfordern der Ressource auslöst. Das wird anscheinend asynchron zu einem passenden Zeitpunkt ausgelöst.
function preload() {
for(var img, i = 0; i < arguments.length; i++) {
img = new Image;
img.src = arguments[i];
}
}
Die Erfahrung zeigt, dass nach einer solchen Schleife ohne Ruhepause nur das letzte der Bilder im Cache vorzufinden ist.
Ich \_vermute\_, dass es bei den anderen Browsern ähnlich ist, habe es aber nie eingehend untersucht.
Gute Nacht,
Martin
--
Der Mensch denkt, Gott lenkt.
Der Mensch dachte, Gott lachte.
Die Erfahrung zeigt, dass nach einer solchen Schleife ohne Ruhepause nur das letzte der Bilder im Cache vorzufinden ist.
OK, Martin, also dann in ein Array packen?
function preload() {
for(var img = new Array, i = 0; i < arguments.length; i++) {
img[i] = new Image;
img[i].src = arguments[i];
}
}
Live long and prosper,
Gunnar
Hallo Gunnar,
function preload() {
for(var img = new Array, i = 0; i < arguments.length; i++) {
img[i] = new Image;
img[i].src = arguments[i];
}
}
Das dürfte eventuell funktionieren. Mich interessiert aber: Muss hinter dem new Image nicht ein Klammerpaar hin, also
`img[i] = new Image();`{:.language-javascript}
?
Schließlich wird hier ein neues Objekt erzeugt, und da ist eigentlich immer ein Konstruktor mit dabei - auch, wenn er leer ist. [Diese Seite](http://de.selfhtml.org/javascript/objekte/images.htm#src) scheint mir Recht zu geben, es würde mich aber nicht wundern, wenn es auch anders ginge.
Grüße
Marc Reichelt || <http://www.marcreichelt.de/>
--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
<http://emmanuel.dammerer.at/selfcode.html>
Hallo,
Muss hinter dem new Image nicht ein Klammerpaar hin, also
img[i] = new Image();
?
Siehe http://forum.de.selfhtml.org/archiv/2005/1/t99078/#m604906 ff.
Mathias
Muss hinter dem new Image nicht ein Klammerpaar hin […]?
Siehe http://forum.de.selfhtml.org/archiv/2005/1/t99078/#m604906 ff.
Mathias,
Soll heißen, die Klammer sind nicht erforderlich?
Was aber sicher nicht schlecht wäre, ist die Abfrage, ob arguments
überhaupt existiert (laut [http://de.selfhtml.org/javascript/objekte/function.htm#arguments@title=SELFHTML] erst ab JavaScript 1.4):
function preload() {
if (var arg = (arguments || preload.arguments))
for(var img = new Array, i = 0; i < arg.length; i++) {
img[i] = new Image;
img[i].src = arg[i];
}
}
„Aber wem erzähle ich das? Dem wissend zwinkernden? Wahrscheinlich doch nur dem Archiv.“ [at]
Live long and prosper,
Gunnar
Argl, ich hätte doch erstmal testen sollen: Die Deklaration mit Zuweisung geht in der if-Abfrage in JavaScript nicht. Dann halt so:
function preload() {
var arg;
if (arg = (arguments || preload.arguments))
for(var img = new Array, i = 0; i < arg.length; i++) {
img[i] = new Image;
img[i].src = arg[i];
}
}
Live long and prosper,
Gun*Ingrid*nar
Hallo molily,
Muss hinter dem new Image nicht ein Klammerpaar hin, also
img[i] = new Image();
?Siehe http://forum.de.selfhtml.org/archiv/2005/1/t99078/#m604906 ff.
Ah ja, interessant, dass das in JavaScript auch geht.
Allerdings werde ich weiterhin für einen leeren Konstruktor ein Klammernpaar verwenden - in anderen Programmiersprachen sind sie nämlich Pflicht (in Java auf jeden Fall).
Grüße
Marc Reichelt || http://www.marcreichelt.de/