setTimeout
Ungemach
- javascript
0 Norbert Klein0 Paul
Hallo miteinander,
Ich habe eine funktion wechsel(), die nach einem best. Ereignis viermal hintereinander in einem best. Zeitabstand aufgerunfen werden soll.
Die Schleife dazu sieht folgendermaßen aus:
do
{
window.setTimeout("wechsel()", 1000);
a++
}
while (a<4);
//Die Funktion wechsel():
function wechsel()
{
document.getElementsByTagName("h1")[i].style.visibility="hidden";
i++
}
Die beiden Variablen a und i werden zu beginn des Skriptes global definiert und auf 0 gesetzt.
Das Problem besteht darin, dass nach dem ersten Timeout die Schliefe scheinbar alle weiteren Durchläufe ohne Verzögerung durchführt, die Funktion wechsel() also viermal direkt hintereinander ausgeführt wird,
meine vier Überschriften verschwinden scheinbar gleichzeitig.
Rufe ich die Funktion über viermal über einen event-handler auf, so klappt alles prima.
Kann sein, dass es diesen Thread schon gab, hatte mit Suche aber leider keinen Erfolg.
Wäre schön, wenn jemand helfen könnte.
n'Abend.
do
{
window.setTimeout("wechsel()", 1000);
a++
}
while (a<4);
Das Problem besteht darin, dass nach dem ersten Timeout die Schliefe scheinbar alle weiteren Durchläufe ohne Verzögerung durchführt, die Funktion wechsel() also viermal direkt hintereinander ausgeführt wird,
meine vier Überschriften verschwinden scheinbar gleichzeitig.
Deine Schleife setzt vier mal einen Timeout, der nach einer Sekunde die Funktion wechsel() aufrufen soll, da diese Timeouts aber (nahezu) zeitgleich gesetzt werden, werden sie auch (nahezu) zeitgleich ausgeführt.
Setz' das a++; einfach vor das window.setTimeout und als Zeit, die vergehen soll, bevor wechsel() ausgeführt wird, nimmst du 1000*a. Der Timeout, der im ersten Schleifendurchgang gesetzt wird, startet also nach einer Sekunde (1000*1 ms), der, der im Zweiten gesetzt wird, nach zwei Sekunden (1000*2 ms), usw.
Gruß
Norbert
Hallo,
Ich hab auf anhieb keinen Fehler gesehen, aber das würde ich eleganter machen. Globale variablen sind kein guter Programmierstil. Und wenn du 4 Überschrift hast würde ich das auch mit einer for-schleife machen statt mit do loop. (und die globalen variablen rauslassen).
So:
for(var a = 0; a <= 4; a++)
{
window.setTimeout("wechsel(" + a + ")", 1000);
}
function wechsel(i)
{
document.getElementsByTagName("h1")[i].style.visibility="hidden";
}
Saludo,
Paul