2011-06-29 62 views
3

我有一些问题,使用.stop()来防止函数排队。如果我使用.stop()或其变体,则该功能在hover:out后死亡,并且不会重新启动。jquery队列/ .stop()问题

你可以在这里看到我的代码和来源:http://joepolitic.com/zkmpract.html。只有最后一个菜单项(c)上有.stop(),其余的都没有。

$('li.contact').hover( 
function() { 
    $(this).stop().toggleClass('li contactb', 800); 
}, 
function() { 
    $(this).stop().toggleClass('li contactb', 800); 
} 
); 
+0

欢迎SO: )请在您的问题中发布代码的相关部分。实时链接很好,但StackOverflow旨在尽可能地自给自足。 –

+0

对不起,我添加了thx! – Alex

+0

[toggleClass()](http://api.jquery.com/toggleClass/)不是动画方法,不应该采用延迟参数。您是否使用提供该功能的插件? –

回答

2

该问题是由toggleClass工作的持续时间造成的。在动画过程中,height直接设置在元素上。一旦动画完成,height被删除,并添加类。当您预先动画stop动画时,height会直接保留在覆盖CSS类的元素上。这就是为什么它看起来不起作用,因为如果有内联样式,添加和删除类不会影响高度。

我认为解决这个问题的唯一方法是不要直接使用toggleClass并使用animate。如果你不希望设置初始高度,你可以在data保存高度动画之前,将其拉出,当你想将其设置回:

http://jsfiddle.net/yCAYw/1/

$("div").hover(function(){ 
    var $this=$(this); 

    $this.data("height",$this.height()); 
    $this.stop().animate({"height":"200px"},1000); 
},function(){ 
    var $this=$(this); 

    $this.stop().animate({"height":$this.data("height")},1000); 
}); 
+0

哇!得到它,它的工作!非常感谢! – Alex

+0

我在这里找到了一个更好的解决方案http://stackoverflow.com/questions/7576365/jquery-problem-with-stop-and-delay-within-animation – eveevans

+0

@eveevans这不是同一个问题,你为什么downvote我?在这种情况下使用'stop(true,true)'会很难看,因为它会导致跳跃。 –