动画文本阴影淡入和淡出

Posted

技术标签:

【中文标题】动画文本阴影淡入和淡出【英文标题】:Animating text-shadow to fade in and out 【发布时间】:2012-08-14 01:19:31 【问题描述】:

我正在尝试使用此处共享的 sn-p 为 text-shadow 设置动画以淡入和淡出:

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/

【问题讨论】:

通过CSS3而不是JS来实现效果会不会很明智? 这个效果在某些事件上触发,基本上涉及2个动画(动画到更高的模糊和随后的动画到更低的模糊)。我不明白 css3 如何促进这一点,那么我又不是 100% 了解 css3 动画。 你见过这个吗? alexpeattie.com/projects/animate-textshadow 我没有,但这对于我正在尝试做的事情来说太过分了。 使用 javascript 添加或删除类,并使用 transition 在拥有或不拥有特定类的各种状态之间进行动画处理。 【参考方案1】:

您需要将正在制作动画的属性的当前状态存储在元素的属性中。否则 $.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 不会等待第一个调用完成,直到它发出下一个调用,因此调用可能会堆积。

【讨论】:

完美,感谢 LeJared! setInterval 只是为了演示问题,我不会在生产中使用它。

以上是关于动画文本阴影淡入和淡出的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 div 的框阴影在悬停时淡入(而不是在悬停时淡出)?

Unity 阴影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的问题

SwiftUI - 使用淡入淡出动画更改文本

IE在JQuery淡入淡出/不透明动画中扭曲文本

Flutter-当内容更改时淡入淡出动画文本小部件

固定文本在 chrome 上 jquery 动画淡入淡出时变得奇怪