停止在当前触发期间触发 jQuery 事件

Stop jQuery events firing during current firing?

本文关键字:jQuery 事件      更新时间:2023-09-26

我对此感到非常恼火!基本上,我有一个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;
    }
}

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

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

您提到了jquery悬停页面上的演示存在此问题。 请参阅该演示的修改版本,并停止。 请注意它如何没有问题:

http://jsfiddle.net/WskXt/

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

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

也许看看悬停意图插件。 http://cherne.net/brian/resources/jquery.hoverIntent.html