MudGuard: setInterval läuft Amok

Beitrag lesen

Hi,

...ok und schon wieder laufe ich gegen die Wand :(

Im Prinzip der gleiche Fehler:

var aktiv = 1; aktiv++;

jetzt hat aktiv den Wert 2.

Durchlauf_1s = setTimeout(function() {

in 1s mach was, was die Variable aktiv benutzt.

aktiv++;

aktiv hat jetzt den Wert 3.

Durchlauf_2s = setTimeout(function() {

mach in 3s was, was die Variable aktiv benutzt.

aktiv++;

aktiv hat jetzt den Wert 4.

Durchlauf_5s = setTimeout(function() {

mach in 8s was, was die Variable aktiv benutzt.

jetzt vergeht 1s, dann läuft der 1. Timeout ab, die Funktion

function() {
        if (aktiv > 1) {
                document.getElementById("bsp_" + (aktiv - 1)).style.display = "none";
                document.getElementById("bsp_" + aktiv).style.display = "block";
                }
        }

wird ausgeführt. Erinnere Dich, aktiv hat bereits den Wert 4.

Weitere 2s später läuft der 2. Timeout ab, es wird

function() {
        if (aktiv > 1) {
                document.getElementById("bsp_" + (aktiv - 1)).style.display = "none";
                document.getElementById("bsp_" + aktiv).style.display = "block";
                }
        }

aufgerufen. aktiv hat nach wie vor den Wert 4.

Weitere 5s später läuft der letzte Timeout ab, es wird

function() {
        if (aktiv > 1) {
                document.getElementById("bsp_" + (aktiv - 1)).style.display = "none";
                document.getElementById("bsp_" + aktiv).style.display = "block";
                }
        } 

aufgerufen. Die Variable aktiv hat immer noch den Wert 4.

Durch setTimeout wird nicht das Script angehalten. Es wird sich gemerkt: rufe nach Ablauf der übergebenen Zeit die übergebene Funktion auf. In der Zwischenzeit mach mit dem Script weiter.

Eine mögliche Lösung wäre, das Hochzählen der Variable aktiv in den Funktionen, die an setTimeout übergeben werden, zu machen.

cu,
Andreas a/k/a MudGuard