Adam: SetTimeout nur 3 Sekunden ausführen.

Hallo,
ich bin überzeugt die Lösung ist einfach. nun ja ich komm grad nicht drauf und finden kann ich dazu auch nichts.

Ich rufe mit einem Button eine Funktion auf welche mir in einem bestimmten Bereich schnell die Bilder wechselt, ich möchte dass die Funktion automatisch nach 2-3 Sekunden aufhört. Dies soll von alleine passieren und nicht mit nem Link durch clearTimeout ... wie stellt man sowas an ? ;-)

Hier der Quelltext dazu:

var namen=new Array("1-rot.gif","2-schwarz.gif","3-rot.gif","4-schwarz.gif");  
var bilder=new Array();  
var nr=0;  
  
  var i;  
  for (i=0;i<4;i++) {  
    bilder[i]=new Image();  
    bilder[i].src=namen[i];  
  }  
  
function naechstes()  
{  
  nr=(nr+1)%4;  
    /* Bild austauschen : */  
  document.images[0].src=bilder[nr].src;  
  window.setTimeout("naechstes()",80);  
}  
function start_timeout2() {  
window.setTimeout("naechstes()",0);  
}
  1. Hi,

    Ich rufe mit einem Button eine Funktion auf welche mir in einem bestimmten Bereich schnell die Bilder wechselt, ich möchte dass die Funktion automatisch nach 2-3 Sekunden aufhört. Dies soll von alleine passieren und nicht mit nem Link durch clearTimeout ... wie stellt man sowas an ? ;-)

    spontan fällt mir ein: Bei jedem Bildwechsel einen Zähler mitlaufen lassen, und wenn der einen bestimmten Wert erreicht hat, dann einfach auf den erneuten Aufruf von setTimeout() verzichten.

    Ciao,
     Martin

    --
    Schildkröten können mehr über den Weg berichten als Hasen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. @@Adam:

    nuqneH

    ich möchte dass die Funktion automatisch nach 2-3 Sekunden aufhört. Dies soll von alleine passieren und nicht mit nem Link durch clearTimeout ... wie stellt man sowas an ? ;-)

    Indem du beim Start der Bildwechselfunktion einen zweiten Timer startest, der clearTimeout() für den Timer der Bildwechselfunktion aufruft. Letzteren musst du dir dazu in einer Variablen merken.

    var namen=new Array("1-rot.gif","2-schwarz.gif","3-rot.gif","4-schwarz.gif");

    Das kannst du kürzer haben:
    var namen = ["1-rot.gif", "2-schwarz.gif", "3-rot.gif", "4-schwarz.gif"];

    nr=(nr+1)%4;

    Hm, ich weiß nicht, ob ein Vergleich nicht schneller ist als eine Division. Also:
    if (nr++ == 4) nr = 0;

    window.setTimeout("naechstes()",80);

    Der erste Parameter von setTimeout sollte besser kein String sein, sondern eine Referenz auf eine Funktion:
    window.setTimeout(naechstes, 80);

    function start_timeout2() {

    window.setTimeout("naechstes()",0);
    }

      
    Was bitte soll das denn? Zum Initialisieren der Bildwechselfunktion rufst du diese einfach auf – ohne `setTimeout()`{:.language-javascript}:  
    `   naechstes();`{:.language-javascript}  
      
    Qapla'
    
    -- 
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.  
    (Mark Twain)
    
    1. Moin,

      nr=(nr+1)%4;
      Hm, ich weiß nicht, ob ein Vergleich nicht schneller ist als eine Division. Also:
      if (nr++ == 4) nr = 0;

      in diesem Fall bitte als Preincrement schreiben! So wie du es gezeigte hast, wird nr erst mit 4 verglichen (außerdem bitte nicht auf Gleichheit, sondern auf kleiner oder gleich), und dann unabhängig vom Ergebnis des Vergleichs in jedem Fall noch erhöht. Besser also:

      if (++nr >= 4) nr = 0;

      Aber wenn der Zahlenbereich, in dem nr zählen soll, gerade eine Zweierpotenz ist wie in diesem Beispiel, kann man auch den Vergleich oder die Division preiswert durch eine Bitmaskierung ersetzen:

      nr = (nr+1) & 3;

      Ciao,
       Martin

      --
      Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
        (Ashura)
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(