动画文字阴影淡入淡出

时间:2012-08-17 15:08:20

标签: javascript jquery animation jquery-animate

我正在尝试使用此处共享的代码段为文本阴影设置动画以淡入淡出:

Animating elements of text-shadow with jQuery

我的代码基本上是:

$.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}); 
}});

我遇到的问题是“淡出”部分似乎不起作用。阴影模糊仅增加到20,然后“重置”为0。

问题的解答:http://jsfiddle.net/ANs92/

1 个答案:

答案 0 :(得分:3)

您需要将要设置动画的属性的当前状态存储在元素的属性中。否则$ .animate会在每次动画开始时将该属性设为0。动画从0到0将不会动画。

这样就可以了:

$.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);

工作示例: http://jsfiddle.net/ANs92/16/

请注意:使用setInterval时可能会遇到问题: http://bonsaiden.github.com/JavaScript-Garden/#other.timeouts - >使用setInterval堆叠调用

setInterval not 等待第一个调用完成,直到它发出下一个调用,因此调用可能会叠加。