Sven Rautenberg: Script unterbrechen

Beitrag lesen

Moin!

function slideshow(){
 var slidestop=0;
 while(slidestop==0){
 if(curr_pic==last_pic){curr_pic=1;}
 else{curr_pic=++curr_pic;}
 setTimeout("window.document.op.src = curr_pic'.jpg'", 3000);
 }
}

die if...else Abfrage ist für mein Problem irrelevant. Ich will nur erreichen das die Schleife ,erst nachdem der setTimeout-Befehl ausgeführt wurde, fortgesetzt wird.

Klappt natürlich nicht, weil setTimeout nicht wartet, bis die genannte Zeit abgelaufen ist, sondern einen Code (den du als ersten Parameter angibst) per Timer (die Zeit gibst du im zweiten Parameter an) später ausführt und dann sofort in deiner Schleife weitermacht.

Du mußt umdenken. setTimeout und setInterval sind geeignete Funktionen, aber du mußt ihre Wirkungsweise verstehen. Sie verzögern die Ausführung des übergebenen Befehls (bzw. bei setInterval wird der Befehl regelmäßig wiederholt).

Bastel dir eine Funktion, die deine Grafik um ein Bild weiterschaltet. Diese Funktion kannst du mit setTimeout aufrufen (bzw. bietet sich eigentlich setInterval noch eher an). Dann definierst du noch eine globale Variable slidestop mit dem Defaultwert auf "Slideshow läuft". Deine Funktion fragt ab, ob laut dieser Variablen das Weiterschalten erlaubt ist, und macht es nur dann.

Mit einer weiteren kleinen Funktion bewirkt die Stop/Start-Taste, dass die globale Variable slidestop passende Werte erhält.

Dann fehlt dir eigentlich nur noch eine Liste (Array) mit allen Bildnamen, so dass du die Liste abarbeiten kannst.

Wichtig: setTimeout bzw. setInterval liefern einen Rückgabewert. Dieser wird benötigt, um den Timeout oder das Interval mit clearTimeout bzw. clearInterval zu löschen, damit keine weiteren Aufrufe erfolgen. Es ist durchaus sinnvoll, diesen Rückgabewert zu speichern.

Wahlweise könntest du auf die Variable slidestop verzichten und bei Betätigung der Stop-Taste einfach den Interval löschen - bei Start dann wieder neu setzen.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)