2012-01-09 143 views
2

使用jQuery 1.7.2如何停止()的动画,但允许当前完成

$(function(){ 
    $('#parentElem').mouseenter(function(){ 
     $('.myElem').animate({opacity:1}, 'fast'); 
    }).mouseleave(function(){ 
     $('.myElem').stop().animate{opacity:0}, 'slow'); 
    }); 
}); 

在这个例子中,我有淡入上mouseenter事件后暂停,并再次淡出元素(在mouseout)给予悸动效果。

但是我有一个问题 - 使用.stop()方法,当前正在运行的动画将被中断并再次退出 - 我的'throb'效果不起作用。当然,这正是.stop() - 但是我真正想要做的就是清除队列并让当前动画完成,同时向队列中添加淡出动画。

任何想法?

P.S我也尝试了.clearQueue()方法,但这表现出类似的行为。

编辑: 我真的应该提到的东西 - 我需要在游标结束时保持淡入的元素 - 所以使用animate函数的回调不会解决它。我更新了代码以使其更加明显。对不起,有任何困惑。

回答

5

可以使用complete callback of the animate method执行淡出:

类似的方法可以用来设置标志

$('.myElem').animate({opacity:1}, 'fast', function() {$(this).stop().animate{opacity:0}, 'slow');}); 

更新,以确保生命的停止,然后淡出上后面的鼠标/淡入完成:

(function() { 
    var doFadeOut = false; 
    var fadeOut = function() { 
    if (doFadeOut) { 
     $('.myElem').stop().animate({ opacity: 0 }, 'slow'); 
     doFadeOut = false; 
    } else { 
     doFadeOut = true; 
    } 
    }; 
    $('#parentElem').mouseenter(function() { 
    $('.myElem').animate({ opacity: 1 }, 'fast', fadeOut); 
    }).mouseleave(fadeOut); 
}()) 
+0

很好的答案,谢谢。我现在正在额头上拍掌,因为我没有正确解释问题 - 对不起。请参阅更新后的问题 – jammypeach 2012-01-09 11:57:23

+0

@jammypeach没问题,答案已更新。 – 2012-01-09 12:04:08

+0

很优雅,谢谢。这对我来说很有效 - 你在stopAnimation的if测试中在动画中缺少一个开放的括号:) – jammypeach 2012-01-09 12:07:06

相关问题