2010-04-02 13 views
5

In questa pagina:jQuery: come utilizzare correttamente la funzione .stop()?

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

quando si passa sopra "Informationen" e "Über ins", mostra un sottomenu. Quando sposti il ​​mouse, si nasconde. Normalmente, ho problemi con jQuery in coda ogni singolo hover che faccio, e poi continua ad animare tutti quegli hover. Ho provato a implementare stop(), ma non riesco a farlo funzionare correttamente.

Questo è il codice che sto usando:

<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> 

Grazie!

risposta

4

È necessario .stop() in entrambe le direzioni per fermare la coda, in caso contrario la parte mouseenter del passaggio del mouse continua a fare la coda è animazioni. Inoltre, dal momento che stai commutazione, è possibile ridurre in giù come questo:

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

si avrebbe bisogno il .stop() sulle ul elementi, dato che è quello che sta animando. Prova questo, vedrai che è ancora un po 'goffo perché sta ripristinando l'animazione anziché l'accodamento. Un'alternativa è quella di evitare che la coda, come questo utilizzando le :visible e :hidden selettori ... io preferisco questo effetto, ma spetta a voi :)

$('#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

Sì, ho provato quella versione corta, ma non ha funzionato così ho provato a fermarsi solo al passaggio del mouse ... Comunque, questo codice è ora online, quindi puoi vedere che non funziona. :( – Gavrisimo

+0

@GaVrA - Ho bisogno di spostare il '.stop()' all'elemento che sta effettivamente animando, ma ho fornito un'alternativa molto migliore penso che vivrai, dona alla risposta aggiornata un vortice –

+0

Hey Nick! ho scoperto che ho bisogno di mettere .stop behind.children ma come hai detto tu è un po 'goffo.Questo metodo con: hidden e: visible è molto molto meglio! :) Quindi lo userò. Grazie! ;) – Gavrisimo

1

Credo che sia necessario inserire stop(true,true) nella parte del passaggio del mouse. Quindi interrompe le altre animazioni in corso al momento per eseguire il proprio, a meno che non mi sbagli.

$('#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; 
    }); 
Problemi correlati