Palme: setTimeOut (ich raff dat jetzt net)

Hallo,

ich habe folgende Funktion:

function farbe() {

window.setTimeout("document.getElementById('infotext').style.color = 'red'",3000);
  window.setTimeout("document.getElementById('infotext').style.color = 'green'",3000);
  window.setTimeout("document.getElementById('infotext').style.color = 'blue'",3000);
  }

Diese Funktion soll also die Schriftfarbe nach 3 Sekunden wechseln, erst rot, dann 3 Sekunden später grün, und dann blau.

Die Funktion wechselt aber nach 3 Sekunden direkt nach blau.

Kann mir jemand erklären, warum die übrigen SetTimeOut's scheinbar ignoriert werden?

Grüße

Palme

  1. Diese Funktion soll also die Schriftfarbe nach 3 Sekunden wechseln, erst rot, dann 3 Sekunden später grün, und dann blau.

    Kann mir jemand erklären, warum die übrigen SetTimeOut's scheinbar ignoriert werden?

    Moin, die Funktionen laufen parallel ab, die zweite wartet nicht erst bis die erste fertig ist, somit werden alle zur selben Zeit, nach 3 sec, gestartet. Richtig wäre also:

    function farbe() {
      window.setTimeout("document.getElementById('infotext').style.color = 'red'",3000);
      window.setTimeout("document.getElementById('infotext').style.color = 'green'",6000);
      window.setTimeout("document.getElementById('infotext').style.color = 'blue'",9000);
      }

    cu RFZ

    1. Hallo,

      Moin, die Funktionen laufen parallel ab, die zweite wartet nicht erst bis die erste fertig ist, somit werden alle zur selben Zeit, nach 3 sec, gestartet. Richtig wäre also:

      Ach so ist das. Jetzt klappt es auch so wie ich wollte!

      Vielen vielen Dank!!!

      Grüße

      Palme

  2. Hi,

    ich habe keinen Grund, nur eine Vermutung:
    JavaScript wird zwar sequentiell ausgeführt, aber ein SetTimeout unterbricht nicht die Ausführung der Funktion farbe().
    Du könntest umrüsten auf ein
    window.setTimeout("farbe("red")",3000);
    und dann in der Funktion farbe immer die Farbe aus dem Parameter zu verarbeiten
    function farbe(farbname) {
    document.getElementById('infotext').style.color = farbname;
    //und dann der nächste
    if (farbname == "red")
      window.setTimeout("farbe("green")", 3000);
    if (farbname == "green")
      window.setTimeout("farbe("blue")", 3000);
    }

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  3. Hi,

    function farbe() {

    window.setTimeout("document.getElementById('infotext').style.color = 'red'",3000);
      window.setTimeout("document.getElementById('infotext').style.color = 'green'",3000);
      window.setTimeout("document.getElementById('infotext').style.color = 'blue'",3000);
      }

    Angenommen, der Aufruf der Funktion farbe findet beispielsweise um 17 Uhr 13, 40 Sekunden und 0 Millisekunden, also um 17:13:40.000 statt.

    Dann forderst Du den Brauser mit
    window.setTimeout("document.getElementById('infotext').style.color = 'red'",3000);
    um 17:13:40.001 dazu auf, in 3000ms, also um 17:13:43.001, die Rotfärbung von infotext durchzuführen.

    Außerdem forderst Du um 17:13:40.002 den Brauser mit
    window.setTimeout("document.getElementById('infotext').style.color = 'green'",3000);
    dazu auf, in 3000ms, also um 17:13:43.002, die Grünfärbung durchzuführen.

    Und schließlich kommt noch um 17:13:40.003 die Aufforderung an den Browser,
    um 17:13:43.003 die Blaufärbung durchzuführen

    (jetzt mal einfach für das Beispiel angenommen, daß jeder setTimeout-Aufruf 1ms dauert).

    Es wird also infotext um
    17:13:43.001 rot gefärbt
    17:13:43.002 grün gefärbt
    17:13:43.003 blau gefärbt

    Das geht dann so schnell, daß Du nur das Blau mitkriegst.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/