McNavc: was macht setTimeout eigentlich?

Beitrag lesen

Tagchen !

  • der Ablauf scheint mir etwas konfus zu sein:
  1. ebene()
       x < zahl, ruft auf() auf
  2. auf()
       erhöht x
       ruft MM_showHideLayers(""+wert+"",'','show') auf
       setzt den timer für nix()
       zurück zu 1.

je nach Laufzeitdauer von MM_showHideLayers(""+wert+"",'','show') wird jetzt entweder nach Ablauf der Dauer nix() gestartet _oder_ der Timer für nix() neu gesetzt

ja!

Entweder hab ich's schlecht erklärt, oder wir reden aneinander vorbei :)

Ich versuchs noch mal mit einem Beispiel (die Zeiten sind zum besseren Verständniss natürlich übertrieben):

  • der Timer zum Ausführen für nix() wird auf 5 Sekunden gesetzt
  • die Ausführung von MM_showHide... plus das JS brauchen 1 Sekunde
  • nach 1 Sekunde: hat der Timer jetzt den Wert 4 und (!)
  • das JS setzt den Timer wieder auf 5
    => falls das ohne 'clearTimeout()' überhaupt geht (?)
    -- wird die Funktion nix() _nur_  1x, und zwar nach Beendigung des Skripts (+ 5 Sekunden) aufgerufen (bzw. wenn das Skript in einem endlos-loop liegt _niemals_)
    => falls sich der laufende Timer nicht überschreiben (neu setzen) lässt:
    --- wird das JS und die Funktion MM_showHide... 5x ausgeführt
    --- und genau nach Beendigung des 5. MM_showHide... hat der Timer den Wert 0 erreicht
    --- ergo wird jetzt die Funktion nix() aufgerufen

Problem:
im 1. Fall (timer wird überschrieben) ist der Ablauf Laufzeitbedingt, d.h. ist _NICHT_ vorhersehbar
(genausogut kann ja der Timerwert kleiner sein als die Dauer, in dem Fall würde nix() _irgendwo_ dazwischenfunken)

im 2. Fall erscheint es mir irgendwo sinnlos die Funktion nix() nur sporadisch aufzurufen - dies könnte man auch ohne Timer z.B. mit einem Zähler lösen

Gesamtproblem:
Ich kann auf Grund des Skripts nicht erkennen wann nix() eigentlich starten soll

Versuchen wir's vielleicht mit einem einfachen Ablaufplan:
1. Layer anzeigen
2. Verzögerung
3. Layer ausblenden
4. Verzögerung
5. weiter bei 1.

Wenn es das ist was du willst, kommst du mit zwei Funktionen aus:

function layerEin()
1. Layer einblenden
2. Layerwert erhöhen
3. Timer für layerAus() setzen

function layerAus()
1. Layer ausblenden
2. Timer für layerEin() setzen

MfG McNavc