2010-04-02 21 views
5

Auf dieser Seite:jQuery: Wie funktioniert die Funktion .stop() richtig?

http://www.arvag.net/old/smsbox.de/

, wenn Sie über "Informationen" und "Über Ins" schweben, zeigt es ein Untermenü. Wenn Sie die Maus wegbewegen, wird sie ausgeblendet. Normalerweise habe ich ein Problem damit, dass jQuery jeden einzelnen Hover, den ich mache, in die Warteschlange stellt, und dann animiert er alle diese Hover weiter. Ich habe versucht, stop() zu implementieren, aber ich kann es einfach nicht richtig funktionieren.

Dies ist der Code ich verwende:

<script type="text/javascript"> 
    //<![CDATA[ 
    $(function(){ 
     $('#nav_menu > .center > ul > li').hover(function() { 
      $(this).stop(true,true).children('ul').slideToggle('slow'); 
     }).click(function(){ 
      return false; 
     }); 
    }); 
    //]]> 
</script> 

Dank!

Antwort

4

Sie müssen .stop() in beiden Richtungen um die Warteschlange zu stoppen, da sonst der mouseenter Teil des Hover hält Warteschlangen es Animationen ist. Auch, weil Sie Makeln, können Sie es verkürzen, wie dies unten:

$('#nav_menu > .center > ul > li').hover(function() { 
    $(this).children('ul').stop(true,true).slideToggle('slow'); 
}).click(function(){ 
    return false; 
}); 

Sie würden die .stop() auf den ul Elemente benötigen, denn das ist, was belebend. Versuchen Sie dies, Sie werden sehen, dass es noch ein wenig klobig ist, weil es die Animation zurücksetzt, anstatt sich in die Warteschlange zu stellen. Eine Alternative ist, um die Warteschlange zu verhindern, wie dies die :visible und :hidden Selektoren ... ich diesen Effekt bevorzugen, aber bis zu Ihnen :)

$('#nav_menu > .center > ul > li').hover(function() { 
    $(this).children('ul:hidden').slideDown('slow'); 
}, function() { 
    $(this).children('ul:visible').slideUp('slow'); 
}).click(function(){ 
    return false; 
}); 
+0

Ja, ich, dass kurzer Version versucht, aber es hat nicht funktioniert, so dass ich versucht halt nur beim schweben raus ... Irgendwie ist dieser Code jetzt online, also kannst du sehen, dass es nicht funktioniert. :( – Gavrisimo

+0

@GaVrA - Müssen die '.stop()' zu dem Element, das eigentlich animiert, verschieben, aber ich habe eine viel bessere Alternative Ich denke, du wirst leben, geben Sie die aktualisierte Antwort einen Wirbel. –

+0

Hey Nick! Ich schon herausgefunden, dass ich .stop hinter.children setzen muss, aber wie du gesagt hast, es ist ein bisschen klobig. Diese Methode mit: versteckt und: sichtbar ist viel viel besser! :) Also werde ich das verwenden. Vielen Dank! ;) – Gavrisimo

1

Ich glaube, Sie müssen stop(true,true) auf den Hover-Over-Bereich auch setzen. Es unterbricht dann andere Animationen, die gerade ausgeführt werden, um seine eigenen auszuführen, es sei denn, ich täusche mich.

$('#nav_menu > .center > ul > li').hover(function() { 
     $(this).stop(true,true).children('ul').slideToggle('slow'); 
    },function(){ 
     $(this).stop(true,true).children('ul').slideToggle('slow'); 
    }).click(function(){ 
     return false; 
    }); 
Verwandte Themen