Überprüfen, ob Intervall gelöscht wurde...

malibubu

Mitglied
Hallo zusammen,

angenommen, ich setzte wie folgt mit einer while-Schleife Intervalle:

Code:
while(i<5) {
  out +=200;
  root["MT" + i] = setInterval( _root, "functionsname", out, parameter);
}

In der function "functionsname" wird eine aktion ausgeführt und anschließend das Intervall gelöscht. Das funktioniert auch ohne Probleme.

Nun will ich ständig überprüfen, ob das letze Intervall schon gelöscht wurde.
Ich habe mir überlegt, ein weiteres Intervall zu setzen:
Code:
_root.MTP = setInterval(_root,"pruefen",100,4);
(Die 4 steht für die ID des letzten Intervalls)

Die Prüfe-Funktion:
Code:
function pruefe(iId) {
 if(not _root["MT" + iID]) {
   clearInterval( this["MT" + iID ] );
 }
}

Leider funktioniert das nicht :-(

Hat jemand eine Idee? Danke im Voraus
 
Hallo!

Die von dir vorgeschlagene Variante funktioniert nicht, weil die Bedingung überprüft, ob die Variable gesetzt ist, unabhängig von ihrer Funktion im System. Und das ist sie zwangsläufig.

Ich habe bei deinem Problem aber sowieso ein Verständnisproblem. Die Funktion, die in der Schlaufe laufend aufgerufen wird, soll nach Abarbeitung des Codes gelöscht werden. Wieviel mal willst du denn die Funktion laufen lassen? Ist der Parameter bzw. die Funktion immer der/dieselbe?

In der function "functionsname" wird eine aktion ausgeführt und anschließend das Intervall gelöscht.

Wenn die Funktion nur einmal ausgeführt werden soll, frag ich mich, warum du einen Intervall setzst.
Am Besten beschreibst du mal den effektiven Sinn deines Scripts, d.h. was willst du erreichen, eine Animation, eine Aktualisierung usw. Dann kann dir auch viel eher geholfen werden.

Gruss

PS: Such in diesem Forum mal mit den Begriffen "Klasse" und "Interval". Dort wird vielleicht nicht exakt dein Problem beschrieben, aber mal als Denkanstoss...
 
Hi,

da gibt es verschiedene Ansätze. Auf die Schnelle würde ich ein Array aus Objekten für die Intervalle erstellen und beim Löschen des Intervals ein Flag setzen:
PHP:
var anzahl = 4;

var intervalle = new Array(anzahl);

// Initialisieren
for (var i=0; i<anzahl; i++) {
	intervalle[i] = new Object();
    intervalle[i].isactive = true;
    intervalle[i].IV = 0;
}

// Intervallaufruf:
for (var i=0; i<anzahl; i++) {
    intervalle[i].IV = setInterval(machUndLoesche , 200, i);
}

function machUndLoesche(id) {
	trace(id);
	clearInterval(intervalle[id].IV);
	intervalle[id].isactive = false;
}

function testeInterval(number) {
	if (intervalle[number].isactive) {
		trace("Intervall läuft");
	} else {
		trace("Intervall gelöscht");
	}
}
Statt einem bool'schen Frag "isactive" könntest Du auch eine Timervariable verwenden, die auf 0 heruntergezählt wird; damit könntest Du jedes Interval eine individuelle Anzahl Aufrufe durchlaufen lassen...

Gruß
.
 
Zurück