Jquery队列/ .stop()问题

时间:2011-06-29 18:25:37

标签: jquery

我在使用.stop()阻止函数排队时遇到了一些问题。如果我使用.stop()或其变体,则函数会在hover:out之后死亡,并且不会重新启动。

您可以在此处查看我的代码和来源:http://joepolitic.com/zkmpract.html。只有最后一个菜单项(c)上有.stop(),其余的还没有。

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

1 个答案:

答案 0 :(得分: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); 
});