2012-01-08 20 views
5

Estoy tratando de hacer que div se deslice hacia afuera y hacia adentro al pasar el mouse, es decir, el mouse entre y salga, respectivamente. Sin embargo, cuando entré y salí varias veces, el div siguió deslizándose hacia adelante y hacia atrás básicamente hasta la cantidad de veces que hice el vuelo estacionario. Por favor, consulte este jsFiddle example.jQuery Animation: dejar de animar una vez fuera del mouse

Como probablemente haya adivinado, espero hacer que el div se detenga (es decir, se deslice hacia adentro) una vez que el mouse esté fuera del elemento independientemente de las veces que lo he desplazado. Creo que falta algo en mi comprensión sobre la animación jQuery.

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

Gracias.

Respuesta

17

Necesita jQuery .stop() function. Insértalo en tu cadena de comando antes de comenzar una nueva animación, para interrumpir cualquier animación en curso.

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

Working jsFiddle =)

+0

Esto funciona perfectamente. ¡Gracias! ¿Sabes por qué también necesitamos '.stop()' al ingresar el mouse? Sé que debemos tenerlo porque de lo contrario habrá un "salto" como en la respuesta de @ 3nigma; sin embargo, no estoy seguro del razonamiento detrás de esto. – moey

+2

@ Siku-Siku.Com: La razón para usar '.stop()' tanto en el ingreso del mouse como en el mouse-leave se hace evidente si pasa el mouse sobre el div, lo aleja y luego vuelve rápidamente. Lo que el usuario espera de eso es el div para "dar la vuelta", es decir, * detener lo que estaba haciendo y hacer lo nuevo en su lugar *. Eso es precisamente lo que '.stop()' hace. –

+0

+1 para la aclaración! – 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

Gracias, @ 3nigma. Sin embargo, tenga en cuenta que hay un "salto" cuando el mouse ingresa el 'div 'e inmediatamente sale. Creo que también necesitamos '.stop()' al ingresar el mouse? – moey

+0

Ah, lo tengo ahora: para evitar el "salto", use 'stop (true)' en lugar de 'stop (true, true)'. – moey

0

hay un ejemplo

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

y código jquery

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