setTimeout und Preload - ?
Robert
- javascript
Hallo alle,
ich versuche, eine sehr schnell umschaltende Slideshow zu realisieren. Offline funktioniert es bestens, aber im Netz so gut wie garnicht.
Das ist die Hauptfunktion:
function wechseldich()
{
document.images.slide.src=imgsrc[step-1];
if (step<imgsrc.length) step++; else step=1;
if (t>0) setTimeout("wechseldich()",50);
}
Im Body steht dann
<img src="xyz.gif" name="slide" width="180" height="90">
Da die setTimeout-Zeit 50ms ist, schalten die Bilder, die sich in dem Array imgsrc[] befinden, sehr schnell um und es kommen fast nur broken Images.
Dabei habe ich 1. eine extra Preload-Seite, 2. auf der Slideshow-Seite die Bilder als 1x1 Pixel UND 3. alle Bilder nochmal als Dreamweaver Preload-Funktion.
Kann man irgendwie (das ist mein Problem), per onLoad prüfen, ob das Bild geladen ist und dann erst setTimeout(wechseldich()",50) aufrufen?
Danke, ich bin hier am verzweifeln und eine Forumssuche hat mir auch nicht geholfen.
Robert
function wechseldich()
{
document.images.slide.src=imgsrc[step-1];
if (step<imgsrc.length) step++; else step=1;
Wenn du die umstellst, sparst du dir ein pass Berechnungen:
if ( step < imgsrc.length ) step++; else step = 0;
document.images.slide.src=imgsrc[step];
if (t>0) setTimeout("wechseldich()",50);
}
Im Body steht dann
<img src="xyz.gif" name="slide" width="180" height="90">Da die setTimeout-Zeit 50ms ist, schalten die Bilder, die sich in dem Array imgsrc[] befinden, sehr schnell um und es kommen fast nur broken Images.
50 ms sind zuwenig um irgendwas zu machen, selbst 100 ms reichen wahrscheinlich nicht aus.
Für sowas solltest du animierte gif's nehmen.
Dabei habe ich 1. eine extra Preload-Seite, 2. auf der Slideshow-Seite die Bilder als 1x1 Pixel UND 3. alle Bilder nochmal als Dreamweaver Preload-Funktion.
Kann man irgendwie (das ist mein Problem), per onLoad prüfen, ob das Bild geladen ist und dann erst setTimeout(wechseldich()",50) aufrufen?
Ja, aber nur mit der Variante 2. Bei der 3. Variante musst du bei jedem Bild den onload Handler abfangen und zählen ob alle geladen sind.
Aber letztlich denke ich mal wirst du nicht glücklich werden, denn erstens hat der IE massiv Probleme mit dem Cache, sodass Bilder trotz vorladen nochmal geladen werden und musst du dem Browser auch Zeit lassen zum darstellen.
Struppi.
if (t>0) setTimeout("wechseldich()",50);
50 ms sind zuwenig um irgendwas zu machen, selbst 100 ms reichen wahrscheinlich nicht aus.Für sowas solltest du animierte gif's nehmen.
Die Timeout-Zeit wird über andere Funktionen geregelt, so daß die Zeit von zb 50m auf 100, 300, 800 und 1000 verlängert wird, so daß die Slideshow langsam zum Stillstand kommt - ähnlich wie bei einem Spielautomaten.
Kann man irgendwie (das ist mein Problem), per onLoad prüfen, ob das Bild geladen ist und dann erst setTimeout(wechseldich()",50) aufrufen?
Aber letztlich denke ich mal wirst du nicht glücklich werden, denn erstens hat der IE massiv Probleme mit dem Cache, sodass Bilder trotz vorladen nochmal geladen werden und musst du dem Browser auch Zeit lassen zum darstellen.
Deswegen soll ja erst mit onload geprüft werden, ob das bild geladen ist und dann erst wieder die Funktion aufgerufen werden.
document.images.slide.src=imgsrc[step-1];
X setTimeout("wechseldich()",50);
^--- hier die Funktion erst aufrufen, wenn das Bild oben geladen ist .. aber irgendwie bekomm ich es nicht hin.
document.images.slide.onLoad = setTimeout("wechseldich()",50);
funktioniert nicht :-(
Struppi.
Robert
Für sowas solltest du animierte gif's nehmen.
Die Timeout-Zeit wird über andere Funktionen geregelt, so daß die Zeit von zb 50m auf 100, 300, 800 und 1000 verlängert wird, so daß die Slideshow langsam zum Stillstand kommt - ähnlich wie bei einem Spielautomaten.
Trotzdem wird jeder Browser eine gewisse Zeit zum darstellen brauchen. D.h. wenn die Zeit zu kurz ist wird er das Bild einfach nicht darstellen können.
Kann man irgendwie (das ist mein Problem), per onLoad prüfen, ob das Bild geladen ist und dann erst setTimeout(wechseldich()",50) aufrufen?
Aber letztlich denke ich mal wirst du nicht glücklich werden, denn erstens hat der IE massiv Probleme mit dem Cache, sodass Bilder trotz vorladen nochmal geladen werden und musst du dem Browser auch Zeit lassen zum darstellen.
Deswegen soll ja erst mit onload geprüft werden, ob das bild geladen ist und dann erst wieder die Funktion aufgerufen werden.
Der IE lädt oft (ich weiss jetzt nicht unter welchen Umständen) die Bilder trotzdem vor. D.h. ein preloaden funktioniert ganz einfach nicht.
document.images.slide.src=imgsrc[step-1];
X setTimeout("wechseldich()",50);
^--- hier die Funktion erst aufrufen, wenn das Bild oben geladen ist .. aber irgendwie bekomm ich es nicht hin.document.images.slide.onLoad = setTimeout("wechseldich()",50);
funktioniert nicht :-(
Logisch nicht, ist ja auch Fantasie syntax.
Der event heißt onload und du musst ihm eine Funktionsreferenz zuweisen und keinen Timer., außerdem solltest du den Event bewvor du das laden beginnst zuweisen.
document.images.slide.onLoad = fucntion()
{
alert('fertig');
}
document.images.slide.src=imgsrc[step];
Struppi.