Dummes Problem mit setTimeout Funktion
Schildi
- javascript
Hallo,
Hab ein menu gebastelt, das bei mouseOver die jeweiligen Unterpunkte öffnet (divs..).
Nun baute ich eine Verzögerungsfunktion (s.u.), damit das Untermenue bei mausout nicht sofort geschlossen wird.
Bewegt man die mouse allerdings über einen neuen Hauptmenupunkt, soll das letzte menu sofort geschlossen werden und die Verzögerungsfunktion (s.u.) erneut aufgerufen werden.
Wenn ich nun jedoch sehr schnell, also sachneller als die Verzögerungsfunktion dauert zwischen zB. 2 Hpt Menupunkten hin und her fahre, verschnellert sich der Ablauf der Timeout Funktion immer mehr und somit wird das u menu immer schneller geschlossen :(.
Kann mir da jemand helfen? Wie kann ich zB. die Funktion sofort abbrechen wenn sie erneut aufgerufen wird?
--->Alles: http://www.bb-holding.com/website_fpk/index.htm <---
---delay funktion
function delayHide(){
if(delayStop<=delaySpeed){
if(CMactiv==0){
delayStop++;
}
MenuTimeout = setTimeout("delayHide()",100);
}
else{
delaying = 0;
delayStop = delaySpeed;
getEl(thisMenuName).visibility = "hidden";
menuHidden[ThisMenuNr] = menuContentsGeneralNames+(ThisMenuNr+1)+"_hidden";
}
}
hi,
Du solltest da verschiedene Sperren einbauen, u. a. das timeout mit clearTimeout canceln, und ein flag setzen, um immer den aktuellen Zustand zu kennen.
Ich habe da uebrigens ein einfaches Ausklapp-Menue rumfliegen, bei Bedarf kannst Du es nutzen: http://www.wendenburg.de/test/divNaviStat.html
Es funktioniert etwas anders: mousout setzt eine Wartezeit in Gang, innerhalb der auf mousemove im div geprueft wird.
Gruesse Joachim
hi,
Du solltest da verschiedene Sperren einbauen, u. a. das timeout mit clearTimeout canceln, und ein flag setzen, um immer den aktuellen Zustand zu kennen.
Hab das mit clearTimeout schon probiert.
Aber keine Wirkung :(
Was ist ein flag ?
hi,
Was ist ein flag ?
eine variable, die Du je nach Aktion z. B. auf 1 oder 0 setzt. Per if-Abfrage verhinderst Du nun das mehrfache Aufrufen einer Aktion, erst wen die Aktion vorueber ist, setzt Du die Variable wieder auf ihren Ursprungswert.
Wenn Deine Aktionen bei schnellen Mausbewegungen zu schnell werden spricht das dafuer, dass timeouts sich ueberlagern.
Gruesse Joachim