Malte: Endlosschleife verhindern

Beitrag lesen

Hallo,

ich habe zwei einfache Javascripte geschrieben/umgeändert, um <div>-Container zu bewegen, konkret Navigationsmenüs ein- und auszusliden. slideDown() fährt das Menü aus, slideUp() fährt es wieder ein.

Problem: Wenn slideUp() aufgerufen wird, bevor slideDown() beendet wurde, kollidieren die beiden Scripte, keines kann je sein Ende erreichen, die CPU fährt auf 100% und der <div>-Container bleibt zitternd hängen.

Mir ist schon klar, warum das so ist (liegt an meinen Abbruchbedingungen), aber ich weiß nicht so recht, wie ich das verhindern kann. Bei einem Abbruch vor Beendigung soll der betr. Container im Zweifelsfall "hochfahren".

Ich hab es schon mit einer for-Schleife in slideDown() probiert, so daß diese Funktion maximal $TARGET-mal durchlaufen wird, das funktioniert aber gar nicht - es passiert dann schlicht nichts.

Any hints?

Gruß,

Malte.

function slideDown(whichone,target){
  if(document.getElementById){
    if(parseInt(document.getElementById(whichone).style.top) < target){
      document.getElementById(whichone).style.top = parseInt(document.getElementById(whichone).style.top) + 1 + "px";
      myDown = "slideDown('" + whichone + "'," + target + ")";
      setTimeout(myDown,1);
    }
  }
}

function slideUp(whichone,target){
  if(document.getElementById){
    if(parseInt(document.getElementById(whichone).style.top) > target){
      document.getElementById(whichone).style.top = parseInt(document.getElementById(whichone).style.top) - 1 + "px";
      myUp = "slideUp('" + whichone + "'," + target + ")";
      setTimeout(myUp,1);
    }
  }
}