【问题标题】:Stop jQuery events firing during current firing?在当前触发期间停止触发 jQuery 事件?
【发布时间】:2025-02-10 03:30:01
【问题描述】:

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

这一切都很好,除了如果我将鼠标悬停和鼠标移出非常快,我会闪烁(我假设 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;
    }
}

【问题讨论】:

    标签: javascript jquery queue


    【解决方案1】:

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

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

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

    http://jsfiddle.net/WskXt/

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        【讨论】: