Finde den Fehler einfach nicht!

Eines vorweg: ich habe nicht wirklich Ahnung von JavaScript.

Bei untenstehendem JAVA-Script (wechselnde Images) erscheint zwischendrin (ich glaube, immer am Anfang der Wiederholung) immer wieder ein leeres Bild bzw. der Browser findet es nicht (rotes Kreuz auf weißem Grund halt).
Es werden grundsätzlich aber alle Bilder angezeigt. Nur das Anfangsbild (facewechsel.jpg) wird manchmal übersprungen (zumindest habe ich das Gefühl).
Wo hängt’s?

Danke,
HOFee

<!-- Hide the script from old browsers –
var cell=-1;
var bnumb = navigator.appVersion;
var rel = bnumb.substring( 0 , 2 );
var bname = navigator.appName;
bgood=0;

test ()

function test ( ) {
if ((parseInt( rel ) >= 3.0 && bname==„Netscape“) || (parseInt( rel ) >= 4.0 && bname==„Microsoft Internet Explorer“))
load ( )
}

function load ( ) {
bgood=1;
aImage= new Array (5)
aTime= new Array (5)
for (i=0; i<6; i++) {
aImage[i] = new Image ()
}
aImage[0].src = „./pictures/facewechsel.jpg“;
aImage[1].src = „./pictures/s1.gif“;
aImage[2].src = „./pictures/claudiawechsel.jpg“;
aImage[3].src = „./pictures/s2.gif“;
aImage[4].src = „./pictures/nickwechsel.jpg“;

aTime[0]= 350
aTime[1]= 10
aTime[2]= 350
aTime[3]= 10
aTime[4]= 350
}
ani ();
var cnt= 5;
var i=0
function ani () {
cell=cell+1;
if (cell==0) setTimeout („ani ()“,aTime[cell]);
else if (cell >0 && cell <= cnt) {
document.images[‚andreas‘].src=aImage[cell].src;
setTimeout („ani ()“,aTime[cell]);
}
else if (cell >cnt) {
document.images[‚andreas‘].src=aImage[0].src;
cell=-1;
ani ();
}
}
//end hide–>

1st:Cut and Paste this. 2nd:Relink and Rename all JPGs. 3rd:Test it.
<!–

var bTested = false;
var nLoaded = 0;
var cell = 0;

aImage= new Array();
aTime = new Array();

function test()
{
if (!navigator) return(false);

var bname = navigator.appName;
var bnumb = navigator.appVersion;
var rel = bnumb.substring(0,4);

if ((parseFloat(rel) >= 3.0) && (bname==„Netscape“))
return(true);

if ((parseFloat(rel) >= 4.0) && (bname==„Microsoft Internet Explorer“))
return(true);

return(false);
}

function load(prmCnt)
{
aImage= new Array(); // ImageArray reinitialisieren
aTime = new Array(); // TimeArray reinitialisieren

var iTime = 0;
var iImage = „“;

for (var i=0; i<prmCnt; i++) {
switch(i) {
case 0 : iTime=100; iImage="./pictures/ROUGR1_1.JPG"; break;
case 1 : iTime=100; iImage="./pictures/ROUGR2_1.JPG"; break;
case 2 : iTime=100; iImage="./pictures/ROUGR3_1.JPG"; break;
case 3 : iTime=100; iImage="./pictures/ROUGR4_1.JPG"; break;
case 4 : iTime=100; iImage="./pictures/ROUGR5_1.JPG"; break;
default: return(aImage.length);
}
aTime[i] = iTime;
aImage[i]= new Image();
aImage[i].src = iImage;
}

return(aImage.length);
}

function setImg(prmName,prmImage)
{
if (arguments.length != 2) return(false);

var isImage = eval(„window.document.images[’“+prmName+"’]");

if (isImage) {
window.document.images[prmName].src = prmImage.src;
return(true);
}

return(false);
}

function ani(prmCnt)
{
if ((cell>=0) && (cell<prmCnt)) {
var bSet = setImg(„andreas“,aImage[cell]);
if (bSet) window.setTimeout(„ani(“+prmCnt+")",aTime[cell++]);
} else {
cell = 0;
ani(prmCnt);
}
}

function init()
{
bTested = test();

if (bTested) {
nLoaded = load(5);
if (nLoaded) {
ani(nLoaded);
}
}
}

//–>

Hallo,

erstmal kommt es drauf an wie Body-Block und Script-Block vom Browser der Reihe nach abgearbeitet werden. Liegt Dein img-Tag vor dem Script und das Script dahinter sowie beides im Body? Oder ist nur Dein img-Tag im Body und der Script-Block vielleicht im Head? Das ist naemlich entscheidend, da Du naemlich die ueber ani(); schon die Funktion zum rueberladen der Grafiken startest, bevor vielleicht das img-Tag dem Browser schon bekannt ist. Du solltest ani(); am besten im body-Tag ueber onload=„ani();“ starten, nachdem die HTML-Datei vom Browser vollstaendig geladen ist.

Asserdem sehe ich am Ende vom img-Tag ein verweistes -Tag. Ich denke mal, das img-Tag liegt nicht in einer division mit position:absolute; oder in einem layer-Tag. Dann muss das Image im Netscape anders angesteuert werden, naemlich ueber das child-document.

Deine Arrays aTime sowie aImage werden in der load()-Funktion deklariert und initialisiert. In der Regel sind diese Objekte dann nicht in Deiner ani()-Funktion bekannt, da sich der Gueltigkeitsbereich nur auf load() beschraenkt. Entweder uebergibst Du die Werte als Parameter oder Du definierst die Arrays als globale Variablen.

Manche Browser interpretieren new Array(5); als eine Array mit 5 Elementen mit Index von 0 bis 4. Aber man kann ein Array nicht nur ueber new Array(); deklarieren, sondern auch gleich mit Werten belegen, eas man dann Initialisieren nennt. Das sieht dann wie folgt aus: new Array(0,1,2,3,4); In Deinen Fall wird erst mal ein Array initialisiert, was nur ein Element mit der Zahl 5 besitzt!

Wenn Du fuenf Grafiken brauchst und sie komfortabel ueber for-Loop laedst, dann bitte auch for(var i=0; i

var ary = new Array(5);
for (var i=0; i

Entweder kommt 5-mal ein alert „undefined“ oder nur einmal ein alert „5“. Uebrigens waechst das Array automatisch, wenn Du hinten was anhaengst.

Desweiteren wuerde ich mit: var rel = bnumb.substring(0,4); statt mit var rel = bnumb.substring(0,2); arbeiten. Beim Netscape kommt dann auch wirklich „4.76“ statt „4.“ zurueck. Und dann mit parseFloat(rel); statt mit parseInt(rel); Dann haben wir auch wirklich „4.76“ und nicht nur „4“. Denn Du fragst ja auch in der if-Klausel von test() auch >=3.0 oder >=4.0 ab.

If-Abfragen bitte besser schachteln ueber Klammern oder bist Du Dir der Prioritaeten der einzelnen Operatoren immer sicher?
In Deinem Fall bzgl. „&&“ und „>=“ schon klar, aber es kann auch komplizierter werden.

Deine Variablen „bgood“ und „i“ hat hier keine Funktionalitaet, kann also raus, denke ich mal…

Vir2allender aliasing Reallender

Uff, lange Antwort. Habe jetzt im Moment keine Zeit, dass alles zu checken, möchte mich aber schon mal vorab bedanken.
Melde mich dann u.U. noch mal.
HOFee