Eigenes Preloader Script macht Probleme :(
Stefan
- javascript
hallo leute!
ich habe ien problem mit dem unterem script ..... es soll sozusagen als preloader wirken lauft aber leider net.
ich wäre sehr froh wenn mir jemand beim korrigieren oder ergänzen des scriptes helfen könnte.
ich glaube es liegt entweder am .onerror.
auch über andere vorschläge zu preloadertags (gibt es dieses wort ? :) ) wäre ich sehr sehr froh!
also seeya
--------------------------
der code:
-------------------------
images = new Array("1.jpg", "2.jpg");
var loadImgList = new Array();
var errors;
var erfolg;
document.write();
for (i=0; i<images.length; i++) {
loadImgList[i] = new Image();
loadImgList[i].src = images[i];
if (loadImgList[i].onerror == true) {
errors = errors + "nein";
}
if (loadImgList[i].onload == true) {
erfolg = erfolg + "ja";
}
}
document.write(erfolg + errors);
hi,
if (loadImgList[i].onerror == true)
onerror ist keine Eigenschaft sondern ein Eventhandler.
Wenn schon, dann so:
loadImgList[i].onerror = function(){
alert("isnich");
}
Leider funktionieren die Events im Zusammenhang mit dem Laden von Bildern nicht in allen Browsern zuverlaessig - es besteht akuter Testbedarf.
Gruesse Joachim
Hi Stefan
Dein ganzes Skript sieht aus aus wolltest du Testen ob Bilder geladen werden oder nicht. Dazu solltest du die beiden eventhandler onerror oder onload benutzen.
Die Frage ist nun zunächstmal, warum du preloaden willst, für ein Rollover der selben Seite, oder um Bilder anderer Seiten vorauszuladen ?
Ich gehe mal von ersterem aus (d.h. Preloader für Rollovereffekte) und versuche ein paar Anregungen zu geben.
1.) Dein Preloader sollte erst nach dem laden der Seite aktiv werden, es macht wenig sinn Rolloverbilder laden zu lassen bevor andere, sofort-sichtbare Bilder der Seite geladen werden.
also etwa so
function PreLoader() {
}
<body onload="PreLoader();">
2.) Wenn du herausfinden willst ob ein Rolloverbild geladen wurde oder nicht solltest du das in der Funktion verwenden, die das Normalbild gegen ein Rolloverbild tauscht.
Interessant ist dafür die Eigenschaften complete. So mache ich das zumindest, das Rolloverbild wird nur eingesetzt wenn die eigenschaft complete den Wert true besitzt, ansonsten ist a.) das Bild nicht fertig geladen , b.) das Bild konnte nicht geladen werden. Leider interpretiert der Netscape Navigator in der 6er Version diesen Wert falsch (complete liefert immer true, auch wenn das Bild nicht geladen werden konnte) dafür dürfte dir dann der Eventhandler onerror helfen, mit dem du ein Flag setzt und das sicherheitshalber (wegen NN 6) überprüfst.
So, das was mir spontan einfällt, vielleicht gibst du noch ein paar nähre Infos zu dem ganzen, dann kann ich dir da noch genauer helfen.
gruss
Curt
danke für die antwort. aber ich brauche das script als preloader.
also bilder einer anderern site vorausladen. :(
Hi Stefan,
hab ich doch mal ganz falsch getippt :)
Eigentlich noch etwas einfacher als der Preloader für nen Rollover, lass einfach die Geschichten mit dem Fehler abfangen ganz raus, denn ich denke mal bringt eh nix, was soll das Skript den machen wenn ein Fehler aufgetreten ist beim Preloaden, z.b. weil das Bild nicht geladen. Das Bild erstellen(???), ne, denke mal bringt so nix.
Also dürfte folgendes Skript für deine Bedürfnisse vollkommen reichen
<script language="JavaScript" type="text/javascript">
<!--
preloadImages = new Array("1.jpg", "2.jpg");
function preLoader() {
var loadImgList = new Array();
for (i=0; i<preloadImages.length; i++) {
loadImgList[i] = new Image();
loadImgList[i].src = preloadImages[i];
}
}
//-->
</script>
<body onload="preLoader();">
Das Preloaden nach dem Laden der Seite mach auch in diesem Fall Sinn.
Fehler fängste einfach keine ab, hats geklappt ok, ansonsten kannste eh nix tun. Ich habe mal den Namen deines Arrays von images auf preloadImages geändert, ich bin immer vorsichtig mit Namen die es in Javascript bereits für irendwelche Eigenschaften/Objekte gibt. images gibt es zwar nicht als Eigenschaft von window, abder als Eigenschaft von document. Macht hier zwar kein Problem, aber besser gleich andere Namen verwenden (nur son tipp).
Falls du eine kontrolle willst ob das Preloaden geklappt hat könntest du das Skript wie folgt modifizieren.
function preLoader() {
var loadImgList = new Array();
for (i=0; i<preloadImages.length; i++) {
loadImgList[i] = new Image();
loadImgList[i].onload = preloadOK;
loadImgList[i].onerror = preloadNichtOK;
loadImgList[i].src = preloadImages[i];
}
}
function preloadOK() {
alert("Das Bild "+this.name" wurde erfolgreich geladen");
}
function preloadNichtOK() {
alert("Das Bild "+this.name" wurde nicht geladen");
}
//-->
</script>
<body onload="preLoader();">
gruss
Curt
thx für die antwort.
aber das problem ist, ich würde gerne einen status irgendwie zeigen, ob ein bild schon geladen ist oder nicht. wie zum beispiel eine status leiste.
aber mit .onload wird das ja wohl leider net gehen :(.
weisst du irgendeinen anderen tip?