停止在当前触发期间触发 jQuery 事件
Stop jQuery events firing during current firing?
我对此感到非常恼火!基本上,我有一个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
相关文章:
- 在创建对象后附加一个jquery事件
- 将jQuery事件应用于所有类元素
- Jquery事件处理程序仅适用于匿名函数
- 如何在jQuery事件处理程序中存储和重用超时
- 无线电输入更改的jQuery事件未启动
- 我应该/如何清除mousemove JQuery事件侦听器
- 是否可以在jQuery事件中更改Angular范围
- jQuery事件侦听器多次启动
- jQuery 事件处理程序堆叠
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- 一个接一个地触发jQuery事件
- 在JQuery事件中查找父元素
- 堆叠jQuery事件(动画)
- 在jquery事件中引用javascript对象
- 动态添加对象的jQuery事件处理程序
- jQuery事件命名空间是否可以包含破折号
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 没有为Ajax添加的新元素注册Jquery事件
- 动态创建的DOM元素上的jQuery事件绑定
- jQuery事件未在动态生成的内容上激发