2012-08-17 17 views
5

estoy tratando de animar texto-sombra a aparecer y desaparecer con el fragmento compartido aquí:animación de texto-a la sombra aparecen y desaparecen

Animating elements of text-shadow with jQuery

Mi código es esencialmente:

$.fx.step.textShadowBlur = function(fx) { 
    $(fx.elem).css({textShadow: '0 0 ' + Math.floor(fx.now) + 'px white'}); 
}; 

$("#seconds").animate({textShadowBlur:20}, {duration: 300, complete: function() { 
    $("#seconds").animate({textShadowBlur:0}, {duration: 300}); 
}}); 

Problema que estoy teniendo es que la parte "fadeout" no parece funcionar. desenfoque de la sombra sólo aumenta a 20 y luego "reajusta" a 0.

jsFiddle del problema: http://jsfiddle.net/ANs92/

+1

¿No sería sabio lograr el efecto a través de CSS3 en lugar de JS? – aliirz

+0

Este efecto se desencadena en ciertos eventos, y básicamente involucra 2 animaciones (animar a un desenfoque mayor y animar posteriormente a desenfocar más bajo). No veo cómo css3 podría facilitar esto, una vez más, no estoy 100% actualizado en las animaciones css3. – Naatan

+0

¿Has visto esto? http://www.alexpeattie.com/projects/animate-textshadow/ –

Respuesta

3

Es necesario para almacenar el estado actual de la propiedad desea animar en una propiedad del elemento. De lo contrario, $ .animate asumirá que la propiedad sea 0 cada vez que comience la animación. Y animar de 0 a 0 no animará nada.

Esta manera de que funcione:

$.fx.step.textShadowBlur = function(fx) { 
    $(fx.elem) 
     .prop('textShadowBlur', fx.now) 
     .css({textShadow: '0 0 ' + Math.floor(fx.now) + 'px black'}); 
}; 

setInterval(function() { 
    $("#seconds").animate({textShadowBlur:20}, { 
     duration: 300, 
     complete: function() { 
      $("#seconds").animate({textShadowBlur:0}, {duration: 300}); 
     } 
    }); 
}, 1000); 

Ejemplo de trabajo: http://jsfiddle.net/ANs92/16/

Tenga en cuenta: Es posible tener problemas al usar setInterval: http://bonsaiden.github.com/JavaScript-Garden/#other.timeouts -> Llamadas de apilamiento con setInterval

setInterval hace no espera a que se complete la primera llamada hasta que emita la siguiente llamada, por lo que c todos pueden apilarse.

+0

Perfecto, gracias LeJared! El setInterval fue solo para demostrar el problema, no lo uso en producción. – Naatan

Cuestiones relacionadas