停止jQuery动画堆叠

时间:2010-05-18 14:09:10

标签: jquery jquery-animate

我有一个悬停在网页右上角的选项框。它的不透明度设置为10%,以免妨碍用户。当它们悬停在(mouseenter)上时,我使用jQuery将其淡入并滑入内容(并在mouseout上反向)。

如果他们反复这样做,虽然动画堆叠起来,你有时可能会把鼠标放在静止不动的情况下,但是盒子在你周围溜溜。

我如何解决这种情况?

以下是我目前设置动画的方式

$("#dropdown").mouseenter(function() { 
    $(this).fadeTo('fast',1);
    $("#options").slideDown();
});

$("#dropdown").mouseleave(function() { 
    $(this).fadeTo('fast',0.1);
    $("#options").slideUp();
});

注意我只使用jQuery而不是任何其他插件。

4 个答案:

答案 0 :(得分:11)

在开始新动画之前,请致电stop以终止任何现有动画。你也应该使用悬停而不是mouseenter / mouseleave。

$("#dropdown").hover(function() {  
    $(this).stop().fadeTo('fast',1); 
    $("#options").stop().slideDown(); 
}, function() {  
    $(this).stop().fadeTo('fast',0.1); 
    $("#options").stop().slideUp(); 
});

答案 1 :(得分:2)

您可以使用stop方法停止动画并清除动画队列。

$("#dropdown").mouseenter(function() { 
    $(this).stop(true).fadeTo('fast',1);
    $("#options").stop(true).slideDown();
});

$("#dropdown").mouseleave(function() { 
    $(this).stop(true).fadeTo('fast',0.1);
    $("#options").stop(true).slideUp();
});

您也可以查看hoverintent plugin

答案 2 :(得分:1)

我认为您可以使用 stop 方法。

  

停止当前正在运行的动画   在匹配的元素上。

答案 3 :(得分:1)

fadein()之前使用停止的问题,例如在此示例中:

$("#button").hover(function () {
    $("#light").stop().fadeIn();
  },
  function () {
    $("#light").stop().fadeOut();
});

当悬停状态发生变化时,stop()将在元素已淡化的任何不透明度下具有淡出停止,并且当再次悬停时将以相同的不透明度开始。

结果是多次快速徘徊最终会淡化元素并且不会再次淡入。