2012-04-28 13 views
7

No puedo encontrar una solución a una animación para hacer un rebote div, usando solo animaciones jQuery. Algo así como no funciona:jQuery Bounce Effect al hacer clic no jQuery UI

$("#bounce").click(function() { 
    $(this).effect("bounce", { 
     times: 3 
    }, 300); 
});.​ 

yo preferiría no usar jQuery UI o cualquier plug-in externo, como la flexibilización uno. Un efecto de oscilación sería igual de bueno en mi caso, por lo que cualquiera lo hará.

Aquí hay un example, ¡cualquier ayuda sería muy apreciada! Gracias de antemano

+0

Todavía sugeriría simplemente usando jQueryUI. También dudé en usar jQueryUI, pero como puede seleccionar qué componentes desea incluir en la descarga, puede seleccionar el rebote y nada más para que los archivos js + css sean bastante pequeños ~ 15kb – tObi

Respuesta

18

Simplemente podría encadenar algunos animate llamadas en el elemento de este modo:

$("#bounce").click(function() { 
    doBounce($(this), 3, '10px', 300); 
}); 


function doBounce(element, times, distance, speed) { 
    for(var i = 0; i < times; i++) { 
     element.animate({marginTop: '-='+distance}, speed) 
      .animate({marginTop: '+='+distance}, speed); 
    }   
} 

Ejemplo de trabajo: http://jsfiddle.net/Willyham/AY5aL/

+1

El ejemplo no parece funcionar – jacktheripper

+0

Lo siento, olvidé guardar el violín. Verifique nuevamente ahora. –

+0

para aquellos de ustedes que no pueden hacer que esto funcione, asegúrese de que no haya una propiedad de transición de CSS aplicada al elemento que intenta rebotar. puede interferir porque son propiedades de CSS que estamos manipulando aquí. – designcise

0

Para un rebote vertical se puede intentar algo como esto:

function bounce(element, distance, speed){ 
var bounce_margin_top = $(element).css("margin-top") 
$(element).css("margin-top", "-="+distance) 

$(element).show().fadeIn(200).animate({ 
    "margin-top": bounce_margin_top 
}, { 
    duration: speed, 
    easing: "easeOutBounce" 
}) 
} 
+0

'easeOutBounce' requiere jQuery Ui. – Sparkup

+0

y en jQuery Ui puedes usar shake – tObi

0

Normalmente uso jQuery animado. Para su pregunta específica, que podría tener este aspecto:

El HTML:

<div id="bounce"></div> 

El CSS:

#bounce { 
height:50px; 
width:50px; 
background:#333; 
margin-top:50px; 
position:relative; 
} 

Y, por último, el jQuery:

$("#bounce").click(function() { 
for (var i=1; i<=3; i++) { 
$(this).animate({top: 30},"slow"); 
$(this).animate({top: 0},"slow"); 
    } 
}); 

Y aquí es un violín que funciona: http://jsfiddle.net/5xz29fet/1/

4

Utilice esta función para rebotes amortiguados. Asegúrese de dar al elemento rebote una clase única si usa el código sin cambios.

var getAttention = function(elementClass,initialDistance, times, damping) { 
 
    for(var i=1; i<=times; i++){ 
 
     var an = Math.pow(-1,i)*initialDistance/(i*damping); 
 
     $('.'+elementClass).animate({'top':an},100); 
 
    } 
 
    $('.'+elementClass).animate({'top':0},100); 
 
} 
 

 
$("#bounce").click(function() { 
 
\t getAttention("bounce", 50, 10, 1.2); 
 
});
#bounce { 
 
    height:50px; 
 
    width:50px; 
 
    background:#f00; 
 
    margin-top:50px; 
 
    position:relative; 
 
    border-radius: 50px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="bounce" class="bounce"></div>

Cuestiones relacionadas