molily: Problem mit window.setTimeout

Beitrag lesen

Hallo,

setTimeout ist kein »an dieser Stelle des Codes solange warten, dann die angegebene Funktion ausführen, dann an der derselben Stelle weitermachen«.

setTimeout legt einen Timer in den Hintergrund, der nach der gegebenen Zeit aktiv wird, und zwar dann, wenn gerade kein anderer JS-Code ausgeführt wird.

Wenn du setTimeout mehrfach direkt hintereinander aufrufst, dann führt das nur dazu, dass mehrere Timer im Hintergrund aktiv werden und dann alle zum gleichen Zeitpunkt starten. Und das machst du effektiv in deiner while-Schleife:

while(textLength != a)
{
  textTemp = text.charAt(a);
  window.setTimeout("slideText(textTemp, element)", 1000);
  a++;
}

Diese while-Schleife läuft in ein paar Millisekunden durch, da der Aufruf von setTimeout nicht die Programmausführung verzögert. Es handelt sich nicht um ein sleep()-Befehl!

Ich erwarte eigentlich, dass die Funktion slideText jede Sekunde aufgerufen wird und nach jeder Sekunde einen Buchstaben vom Text (Variable text) hinzufügt bis textLength erreicht ist.

Dann musst du dein Program umstrukturieren. Nicht auf einmal dutzende Timer in den Hintergrund legen, die dann alle zur gleichen Zeit (nämlich 1000 Millisekunden nach Aufruf von setTimeout) aktiv werden. Sondern wirklich zwischen jedem Aufruf von slideText 1000 Millisekunden vergehen lassen.

Das kannst du z.B. mit http://de.selfhtml.org/javascript/objekte/window.htm#set_interval@title=setInterval umsetzen. Das rufst du einmal auf, dann wird bis zum, Abbruch mit clearInterval alle x Millisekunden eine Funktion aufgerufen. In der kannst du jedes Mal einen weiteren Buchstaben aus dem String entnehmen (dazu brauchst du einen globalen Zähler, wie »a« in deinem jetzigen Code) und ins Dokument schreiben.

Statt insertData kannst du übrigens auch einfach document.getElementById(element).firstChild.nodeValue += "string"; notieren, soweit ich weiß.

Mathias