2012-01-08 27 views
5

Sto provando a far scivolare fuori uno div e, al passaggio del mouse, il mouse entra e esce, rispettivamente. Tuttavia, quando mi sono librato più volte dentro e fuori, lo div continuava a scorrere avanti e indietro praticamente fino al numero di volte in cui facevo il hover. Si prega di fare riferimento a questo jsFiddle example.jQuery Animazione: interrompe l'animazione dopo il mouse

Come probabilmente avete indovinato, spero di far cessare div (ossia fatto scorrere in) una volta che il mouse è esterno dell'elemento indipendentemente quante volte ho il mouse su di esso. Penso che manchi qualcosa nella mia comprensione dell'animazione di jQuery.

$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).animate({ left: "-270" }, 500); 
}); 

Grazie.

risposta

17

È necessario il numero jQuery .stop() function. Inseriscilo nella catena di comando prima di iniziare una nuova animazione, per interrompere eventuali animazioni in corso.

$('#state-slider').hover(function() { 
    $(this).stop().animate({ left: 0 }, 500); 
}, function() { 
    $(this).stop().animate({ left: -270 }, 500); 
}); 

Working jsFiddle =)

+0

Questo funziona perfettamente. Grazie! Sai perché abbiamo bisogno anche di '.stop()' al momento del mouse? So che dobbiamo averlo perché altrimenti ci sarà un "salto" come nella risposta di @ 3nigma; tuttavia, non sono sicuro del ragionamento che ci sta dietro. – moey

+2

@ Siku-Siku.Com: Il motivo dell'uso di '.stop()' su mouse-enter e mouse-leave diventa evidente se si passa il mouse sopra il div, lo si sposta indietro e quindi si torna rapidamente indietro. Ciò che l'utente si aspetta da questo è il div a "girarsi", cioè interrompere quello che stava facendo e invece fare la nuova cosa *. Questo è esattamente ciò che fa '.stop(). –

+0

+1 per il chiarimento! – moey

1
$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).stop(true,true).animate({ left: "-270" }, 500); 
}); 

DEMO

http://api.jquery.com/stop/

+0

Grazie, @ 3nigma. Tuttavia, nota che c'è un "salto" quando il mouse entra in "div" e immediatamente fuori. Penso che abbiamo anche bisogno di '.stop()' al mouse per entrare? – moey

+0

Ah, ho capito subito: per impedire il "salto", usa "stop (true)" invece di "stop (true, true)". – moey

0

c'è un esempio

http://jsfiddle.net/amkrtchyan/TQz5U/1/

e codice jquery

$(function() { 
    $("#state-slider").hover(function() { 
     $(this).stop(true,true).animate({ 
      left: '0' 
     }, 500); 
    }, function() { 
     $(this).stop(true,true).animate({ left: "-270" }, 500); 
    }); 
}); 
Problemi correlati