setInterval / clearInterval

N

Netzwerkidi

Hallo,

wie kann man denn die Interval-ID mit übergeben beim Aufruf?
Im folgende Code würde ich gerne (irgendwie lieber) die zweite Variante verwenden als die erste, aber noch ist da der Wurm drin.
LG

Code:
// derzeit verwendete Variante
function f(id,int) {
    if (k) {
      ...
      ... 
      if (int=="int5") {
        clearInterval(int5);
      } else if (int=="int6") {
        clearInterval(int6);
      } else if (int=="int7") {
        clearInterval(int7);
      }
    }
  };
   
  int5 = setInterval("f(\"#id1\",\"int5\")", 250);
  int6 = setInterval("f(\"#id2\",\"int6\")", 250);
  int7 = setInterval("f(\"#id3\",\"int7\")", 250);

  
// angestrebte Variante 
function f(id,int) {
    if (k) {
      ...
      ... 
      clearInterval(int);
    }
  };
   
  int5 = setInterval("f(\"#id1\","+int5+")", 250);
  int6 = setInterval("f(\"#id2\","+int6+")", 250);
  int7 = setInterval("f(\"#id3\","+int7+")", 250);
 
Thx!
Trotzdem merkwürdig, dass der String als Interval-ID akzeptiert wird.
 
Es wird ja nicht die Interval-ID intx übergeben sondern ein String "intx", der aber dann aber als Interval in der Funktion interpretiert wird.
Habe gerade noch mal gecheckt, interval-id ist vom typ number.
 
Zuletzt bearbeitet von einem Moderator:
Mir ist gerade aufgefallen, dass es quasi unmöglich ist so etwas über eine eigene Funktion zu realisieren, da man in jedem Fall die Intervall-ID erst erhält, wenn man die Funktion mit den Parametern schon überreicht hat. Man kann also diesen Parametern keinen mehr hinzufügen.

Nachtrag: Ich habe mal kurz folgendes gebastelt, was dein Problem vielleicht lösen könnte. Allerdings musst du dir hier dann merken, was du für eine Funktion hattest.
Javascript:
IntervalManager = {
  add: function (func, timeout, args) {
    var tmp = function () {
      func.apply(this, args);
    };
    
    var id = window.setInterval(tmp, timeout);
    this.intervals.push([func, id]);
  },
  
  remove: function (func) {
    for (var i = 0; i < this.intervals.length; ++i)
    {
      if (this.intervals[i][0] == func)
      {
        window.clearInterval(this.intervals[i][1]);
        this.intervals.splice(i, 1);
        return true;
      }
    }
    return false;
  },
  
  intervals: []
};
Und wird dann so verwendet:
Javascript:
function f (id)
{
  IntervalManager.remove(this);
}

IntervalManager.add(f, 250, ["#id1"]);
 
Zuletzt bearbeitet:
Und mir ist gerade aufgefallen, dass die Intervalle weiterlaufen trotz clearInterval, auch wenn vorher ein parseInt gemacht wird. Habe das if-Statement nun mal wieder drin.

Ich suche eigentlich eine allgemeine Funktion in der Art

checkIrgendwasImInterval(Irgendwas,Interval).

Ist allerdings schwieriger als gedacht, weil, wie du erkannt hast, die Wert, den man braucht erst erzeugt wird. Vielleicht mit einem Array.

Werde die Funktion posten, wenn ich sie habe.
 
Ich denke, das geht in die Richtung, die ich mir vorgestellt habe.
Werde ich mir nachher mal genauer ansehen; ich muss gleich weg.
LG
 

Neue Beiträge

Zurück