Du verdrehst gerade die Tatsachen etwas. Du hast doch deinen vorletzten Beitrag editiert. Ich habe deine erste Version gelesen und daraufhin meine Antwort geschrieben. Dass diese nun auf deinen editierten Beitrag nicht mehr passt, dafür kann ich nichts
So und nun zum Thema. Ich gehe folgendermaßen vor: Ich setze mir ein Problem und dieses gilt es zu lösen. Dabei nutzt es mir recht wenig, wenn ich fertige Preloader-Scripte kopiere. Ich bin bei meinem Weg auf ein Problem gestoßen und wollte wissen, wie ich dieses vermeiden kann. Wenn ich da als Antwort bekomme: "Du machst alles falsch, lies richtig, damit geht es nicht" (so sah dein uneditierter Beitrag aus), hilft mir das nicht.
Nochmal zu meinem Problem: ich bin in js so konform, daß ich Endlosschleifen erkenne und vermeiden kann. Auch bin ich mir dessen bewusst, dass ich nicht im Script ein Objekt handeln kann, welches erst später definiert wird (wie aus meinem geposteten Code auch ersichtlich, da werden die Bilder VOR dem handle geladen).
Apropos keine Abbruchbedingung, was ist dann das:
while (i<=document.images.length){...i++;...}
Un da sagst du mir, ich lese nich richtig
So, zum Tthema: Ich hatte gefragt, warum
window.setTimeout(fertig(),10); beim ersten Schleifendurchlauf funktioniert (die funktion wird ausgeführt), beim zweiten Durchlauf aber "ungültiges Objekt" kommt.
warum window.setTimeout("fertig()",10) die funktion garnicht erst aufruft
und woran es liegen kann, dass das Script, wenn ich eine durch alert() hervorgerufene Verzögerung (unabsichtlich) eingebaut habe, es aber ohne alert() nicht funktioniert.
Wenn ich programmiere, möchte ich auch die Sprache verstehen, dabei nutzt es nichts, wenn ich das Problem nur umgehe, aber nicht verstehe, warum es so nicht funktioniert.
So, und hier noch der komplette Code
Code:
<script type="text/javascript">
function setparam(wert){
anzahl=wert;
teiler =1000/anzahl;
}
function data(){
ppos =document.getElementById('bar').style.width.indexOf("p");
document.getElementById('text').innerHTML=document.getElementById('bar').style.width.substring(0,ppos-1)+"%";
}
function vis(){
document.getElementById('barwindow').style.visibility="hidden";
}
function inc(){
loads++;
if(loads>=anzahl){vis();}
else{
ppos =document.getElementById('bar').style.width.indexOf("p");
percent =Number(document.getElementById('bar').style.width.substring(0,ppos))+teiler;
if(percent>=1000){
vis();
}
else{
document.getElementById('bar').style.width=String(percent)+"px";
data();
}
}
}
function reset(){
document.getElementById('bar').style.width="0px";
document.getElementById('text').innerHTML="0%";
anzahl =100;
loads =0;
teiler =10;
}
function fertig(){
if (document.images[i].complete == true){
inc();
i++;
}
}
</script>
<body>
<div id="barwindow" style="position:absolute; top:0px; left:0px; z-index:2; visibility:visible; background-color:#ffff00;">
<table style="height:768px;width:1024px" cellspacing="0" cellpadding="0" border="1"><tr><td align="center" valign="middle">
<table style="width:1005px" cellspacing="0" cellpadding="0" border="1">
<tr>
<td width="1005px" height="10px" align="left" >
<table border="0" cellspacing="0" cellpadding="0"><tr>
<td id="bar" style="background-color:#0000ff; width:0px; height:15px"></td>
<td style="position:absolute; top:377px; left:500px;"><font id="text" style="font-size:8pt;text-align:center">0%</font></td>
</tr></table>
</td>
</tr>
</table>
</td></tr></table>
</div>
<script>reset();setparam(40);</script>
<!--
ins nachfolgende div wird die hauptseite eingebunden. in jedes große zu ladende objekt (zb bilder) werden onLoad=inc(); aktionen eingebunden, die den fortschritt anzuzeigen
-->
<div style="position:absolute; top:0px; left:0px; z-index:1; background-color:#00ffff;">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
<img src="pics/background/design.bmp">
</div>
<script>
i=0;
while (i<document.images.length){
//alert(i); <-- dieses alert ist dasjenige welches ich oben beschieben habe
fertig();
}
</script>
</body>
</html>
PS: ich möchte mich keinesfalls absichtlich gegen irgendwelche Regeln stellen oder Leute herausfordern, möchte aber auch fair behandelt werden
Hoffe nun sind alle Ungereimtheiten beseitigt