p@t: setTimeout ignoriert befehl

hallo zusammen,

habe mir einige funktionen gebastelt, die mir verzögert ebenen ein- und ausblenden sollen.

für den aufruf der nächsten funktion benutze ich "window.setTimeout("auf_zu()",500);".  einmal nach anzeigen der ebene und einmal nach verstecken der ebene (damit bei einer wiederholung >1 wieder eine kleine pause entsteht).

man kann sich das so vorstellen, dass sich die funktionen ständig wiederholen, aber immer eine ebene mehr anzeigen sollen(zaehler wird erhöht).

nun ist es so, dass in der ersten runde sich die ebene schön ein und ausblendet, aber sobals zwei ebenen hintereinander (mit verzögerung natürlich9 angezeigt werden sollen, diese gleichzeitig aufleuchten. ich verstehe nicht wo der fehler liegen soll!!!

wer kann helfen?

bin über jeden tipp dankbar, da mich das schon eine ganze weile beschaftigt.

greetZ
p@

anbei das script:

script language="JavaScript" type="text/javascript">
var anzahl, zahl, zaehler, auswahl, anfang, ende, befehl ,x , wert;

//1.Array initialisieren, variablen intitialisieren
function start()
{
anzahl = new Array;
zahl = 0;zaehler = 0;
auswahl = new Array;
vorspiel();
}
//2.variablen initialisieren, zahl um 1 erhoehen, zufallszahl zw. 1 und 4 generieren, zufallszahl in array(anzahl) schreiben
function vorspiel()
{ t = 0;wert = 0;
 anfang = -1; ende = 0;
 zahl++;x= 0;
 var neue_anzahl = new Array();
 zufallszahl = Math.round(3 * Math.random()) + 1;
 anzahl = anzahl.concat(zufallszahl);
 ebene();
}
//3.solange ebenen ein und ausblenden wie x kleiner zahl, id der ebene an var wert uebergeben, funktion zum anzeigen der ebene aufrufen
function ebene()
{
 while(x < zahl)
 {
  anfang++;ende++;
  wert = anzahl.slice(anfang, ende);
  auf();
 }
}
//4.ebene anzeigen, timeout setzen fuer funktion zu()
function auf()
{
 x++;
 showLayers(""+wert+"",'','show');
 window.setTimeout("zu()",500);
}
//5.ebene ausblenden, timeout setzen fuer funktion ebene()
function zu()
{
 hideLayers('1','','hide','2','','hide','3','','hide','4','','hide');
 window.setTimeout("ebene()",500);
 //ebene();
}

  1. wer kann helfen?

    Bin mir nicht sicher ob ich helfen kann und ich habe den Code (ehrlich gestanden) nicht wirklich angesehen.

    Jedenfalls ist bei setTimeout eines zu berücksichtigen:
    Die Codeausführung wartet NICHT x Millisekunden, bis das Statement (meistens Funktionsaufruf) ausgeführt wird. Das Programm bleibt also NICHT stehen.
    Es wird lediglich ein Timer angestossen, der nach einer gewissen Zeitspanne das Statement ausführt.

    Also:

    setTimeout("alert('eins'),1000);
    alert("zwei");

    bringt Dir 2 Messageboxen auf den Schirm, aber in folgender Reihenfolge:
    zwei
    eins (nach einer Sekunde, sofern Du schnell genug auf OK klickst.)

    Ich vermute mal, dass es daran liegt, denn in Deiner While-Schleife wird die Funktion auf() aufgerufen, die dann den Timer auslöst.
    Läufst Du da 3 mal durch, laufen 3 Timer, die aber alle fast zur gleichen Zeit zuschlagen.

    Hope that helps!

    1. hi thomas,

      yepp das wars. setTimeout hat einfach mehrfache timeouts gesetzt.
      konnte das problem jetzt mit setInterval lösen.

      das tut auch was es verspricht ;-)

      greetZ
      p@