停止当前触发期间触发的jQuery事件?

时间:2011-05-13 23:08:37

标签: javascript jquery queue

我对此非常恼火!基本上,我有一个最终会有一个小菜单的div,当你将鼠标悬停在另一个div上时,这个小div会向下移动到视图中并变得可见(mouseout导致相反的情况)。

这一切都很好用,除非我快速鼠标悬停和鼠标移动,我会闪烁(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;
    }
}

3 个答案:

答案 0 :(得分:2)

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

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

您在jquery悬停页面上提到了有问题的演示。请使用stop查看该演示的此修改版本。请注意它没有问题:

http://jsfiddle.net/WskXt/

答案 1 :(得分:0)

不,你不能延迟事件,因为它们是由浏览器引发的,而不是jquery引发的。相反,您可以使用queue属性将动画放入队列中。队列只会在上一个动画完成后运行动画。

在此页面中搜索queuehttp://api.jquery.com/animate/

答案 2 :(得分:0)