2011-05-13 93 views
4

我对此非常恼火!基本上,我有一个div,它最终会有一个小菜单,当你将鼠标放到不同的div上时,这个小div会向下移动到视图中并变得可见(mouseout会导致相反的效果)。停止当前触发过程中触发jQuery事件?

这一切都很好,除非如果我mouseover和鼠标非常快,我得到闪烁(jQuery队列赶上,我假设)。

所以基本上,有没有办法阻止这种情况发生?你可以告诉jQuery“目前为止,在当前队列完成之前不要排队其他任何东西”吗?

我还是比较新的jQuery。我的代码下面看起来像它应该工作,但似乎并没有停止队列添加!在这种情况下请原谅愚蠢地使用x ++/y ++,这只是我在发布之前尝试的最后一件事。

任何人都可以提供帮助吗?

var x = 0; 
var y = 0; 

function hideme() 
{ 
    if (x == 0 && y == 0) 
    { 
     x++; 
     $(unimenu).fadeOut('slow'); 
     $(unimenu).animate({top: "-40px" }, {queue: false, duration: 'slow'}); 
     x = 0; 
    } 
} 

function showme() 
{ 
    if (y == 0 && x == 0) 
    { 
     y++ 
     $(unimenu).fadeIn('slow'); 
     $(unimenu).animate({top: "40px" }, {queue: false, duration: 'slow'}); 
     y = 0; 
    } 
} 

回答

2

我认为你要找的是stopstop将停止以前的动画。如果您在开始下一个动画之前停止之前的动画,则可避免排队造成您的问题的大量动画。

http://api.jquery.com/stop/

你提到有问题jQuery的悬停页面上的演示。使用stop来查看该演示的修改版本。注意它没有问题:

http://jsfiddle.net/WskXt/

0

不,你不能延迟事件,因为这些是由浏览器,而不是jQuery提出的。相反,您可以使用queue属性将动画放入队列中。该队列将只在前一个动画完成后才运行动画。

搜索本页面queue