steckl: Rekursion mit Timeout

Beitrag lesen

Hi,

ich habe mir in JS Funktionen geschrieben, mit denen ich per Klick auf Buttons ein Div in eine Richtung wandern lassen kann. Das ganze ist hier zu finden.

Ein Beispiel fuer so eine Funktion waere:

  
      function nachRechts(speed,rek)  
      {  
          init();  
  
          if(((left+width) < fensterbreite) && (stop == 0))  
          {  
              if(!pause)  
              {  
                  left += speed;  
                  ele.style.left = left + "px";  
              }  
  
              if(rek)  
              {  
                  window.setTimeout("nachRechts("+speed+",2)",timeout);  
              }  
          }  
  
          showInfos();  
      }  

Erklaerung:
init() initialisiert die globalen Variablen ele und fensterbreite. Wird jedesmal aufgerufen, da es ja sein kann, dass der Anwender sein Fenster groesser/kleiner macht.
Stop und Pause sind ebenfalls globale variablen, die ausserhalb gesetzt werden koennen um das ganze anzuhalten, bzw. zu unterbrechen.
left ist der Abstand von links, den das Div aktuell hat.
speed ist die Schrittweite, in der das Div verschoben werden soll.

Aufgerufen wird das ganze so:
<button class="bla" onclick="stop=0;pause=0;nachRechts(stepWidth,1);">-</button>

Jetzt zu meinem Problem:
Wenn ich den Button einaml druecke funktioniert alles wunderbar. Wenn ich jedoch oefters draufdruecke oder bevor fertig gescrollt ist einen anderen Button klicke werden die Funktionen parallel ausgefuehrt. (Im IE6 und im FF1.5)

Ich moechte aber, dass erst nochmal gescrollt werden kann, wenn der letzte Scrollvorgang beendet ist.
Hat jemand hierfuer einen Loesungsvorschlag?

Zwei loesungsansaetze, die aber nicht geklappt haben war es zum einen, beim ersten Aufruf (wenn rek == 1) eine globale Variable zu setzen, die erst wieder zurueckgesetzt wird, wenn das Scrollen beendet ist. Aber ich konnte nicht feststellen, ob noch gescrollt wird, weil ja nicht gewartet wird, bis das setTimeout() fertig ist, sondern die Routine einfach durchlaeuft.
Das zweite was mir eingefallen ist war, dass sich die Funktion normal rekursiv aufruft, was aber daran gescheitert ist, dass ich keine "sleep-Funktion" fuer Javascript gefunden habe.

mfG,
steckl