无法获得jQuery效果在mouseout上运行

时间:2011-08-10 18:00:21

标签: javascript jquery css3 jquery-effects

我不知道为什么,但悬停“out”函数中的animate()似乎从0值开始,而不是16,它应该由悬停“in”设置“功能:

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

  $('a').hover(function(){
    $(this).stop().animate({textShadowBlur:16}, {duration: 400});
  }, function(){
    $(this).stop().animate({textShadowBlur:0}, {duration: 900});
  });

因此我在鼠标输出时出现了突然的文本阴影更改,没有动画

我做错了什么?

jsfiddle


好的,我修好了。它似乎是步骤函数定义的jquery bug或其他东西。 ANyway这将起作用:

  $('a').hover(function(){
    $(this).stop().animate({nothing:16}, {duration: 400, step: function(now, fx){
       $(this).css({textShadow: '0 0 ' + Math.floor(fx.now) + 'px #000'});
     }});
  }, function(){
    $(this).stop().animate({nothing:0}, {duration: 900, step: function(now, fx){
       $(this).css({textShadow: '0 0 ' + Math.floor(fx.now) + 'px #000'});
     }});
  });

2 个答案:

答案 0 :(得分:2)

您的语法无效。您目前正在关闭鼠标悬停功能后关闭hover事件。

尝试:

$('a').hover(
    function(){     
        $(this).stop().animate({textShadowBlur:16}, {duration: 400});     
    }, 
    function(){     
        $(this).stop().animate({textShadowBlur:0}, {duration: 900});   
}); 

答案 1 :(得分:2)

看起来像语法问题

$('a').hover(function() {
    $(this).stop().animate({textShadowBlur: 16}, {duration: 400});
    // remove the extra }});
}, function() {
    $(this).stop().animate({textShadowBlur: 0}, {duration: 900});
});

<击>

修改

看起来你已经找到了解决办法,这里有一个用css 3过渡来做这个效果的选项:

fiddle

a {
    font-size:40px;
    text-shadow:0 0 0 #000;
    -webkit-transition:text-shadow .9s linear;
}
a:hover {
    text-shadow:0 0 16px #000;
    -webkit-transition:text-shadow .4s linear;
}