• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] setTimeout() funktioniert, clearTimeout() nicht

Klemens

New member
Hallo zusammen,

ich habe eine Slideshow, sie funktioniert eigentlich recht gut, das heißt, die Bilder wechseln wie gewollt.
Nun habe ich noch eine Navigation dazugefügt. Ich kann mit dem Button weiterblättern. Nur habe ich das
Problem, dass ich die davor gesetzten setTimeout() nicht löschen kann, also ich weiß eben nicht wie.
Ich vermute Fehler in den Zeilen mit einem x am Anfang.

Danke für jeden Tipp!

Schöne Grüße!
Klemens


Hier der Code in HTML für den Weiterbutton:

HTML:
    <form>
    <img name='danach' src='$bild_vor' onClick='danachBild()' />
    </form>

Hier der Code in JavaScript:

Code:
    var xAnzahl     = ImageArr.length;
    var xZaehler    = -1;
    var xZaehlerAlt = 0;
x   var xWechsel    = setTimeout(danachBild, Anzeigedauer);

    function danachBild()
      {
      xZaehlerAlt = xZaehler;
      xZaehler++;
      if(xZaehler >= xAnzahl)
        {
        document.getElementById(xZaehlerAlt).src = button_hell;
        xZaehler = 0;
        }
      document.getElementById("Foto01").src = ImageArr[xZaehler];
      document.getElementById(xZaehler).src = button_dunkel;
      if(xZaehlerAlt >= 0)
        {
        document.getElementById(xZaehlerAlt).src = button_hell;
        }
x     clearTimeout(xWechsel);
x     setTimeout(danachBild, Anzeigedauer);
      }

    setTimeout(danachBild, 100);
 
Du musst bei jedem Aufruf von window.setTimeout() den Rückgabewert in xWechsel speichern. (Der erste Aufruf bei der Deklaration von xWechsel ist übrigens falsch.)
Code:
    var xAnzahl     = ImageArr.length;
    var xZaehler    = -1;
    var xZaehlerAlt = 0;
    var xWechsel;

    function danachBild(){
      xZaehlerAlt = xZaehler;
      xZaehler++;
      if(xZaehler >= xAnzahl){
        document.getElementById(xZaehlerAlt).src = button_hell;
        xZaehler = 0;
      }
      document.getElementById("Foto01").src = ImageArr[xZaehler];
      document.getElementById(xZaehler).src = button_dunkel;
      if(xZaehlerAlt >= 0){
        document.getElementById(xZaehlerAlt).src = button_hell;
      }
      window.clearTimeout(xWechsel);
      xWechsel = window.setTimeout(danachBild, Anzeigedauer);
    }

    xWechsel = window.setTimeout(danachBild, 100);

PS: Warum ist der erste Aufruf von danachBild auch in einem Timeout?
 
Hallo kkapsner,

recht herzlichen Dank für Deine Hilfe! Jetzt passt es sehr gut. Zu Deinem PS: Ich rufe damit das erste Bild mit einer Verzögerung auf, dann startet die Slideshow automatisch.

Schöne Grüße!
Klemens
 
Zurück
Oben