Javascript 防止不必要地触发事件
这很好,但是如果我多次快速悬停/离开菜单的Javascript 防止不必要地触发事件,javascript,jquery,events,Javascript,Jquery,Events,这很好,但是如果我多次快速悬停/离开菜单的项,一旦我停止,我会看到它像悬停一样上下滑动 请观看这类视频捕获 ?如何防止这种情况发生?您可以使用停止当前动画。您还可以将两个事件处理程序组合起来,只需使用(它可以包含两个参数,第一个是在mouseenter上运行的函数,第二个是在mouseleave上运行的函数): 第一个参数是clearQueue,当您反复悬停时,它将停止动画无休止地排队。第二个参数是jumpToEnd,它强制任何当前运行的动画在启动新动画之前结束 这里有一个。这一切归结为您拥有
项,一旦我停止,我会看到它像悬停一样上下滑动
请观看这类视频捕获
?如何防止这种情况发生?您可以使用停止当前动画。您还可以将两个事件处理程序组合起来,只需使用(它可以包含两个参数,第一个是在mouseenter
上运行的函数,第二个是在mouseleave
上运行的函数):
第一个参数是clearQueue
,当您反复悬停时,它将停止动画无休止地排队。第二个参数是jumpToEnd
,它强制任何当前运行的动画在启动新动画之前结束
这里有一个。这一切归结为您拥有一个变量,该变量将存储滑动的状态,并在滑动已经发生时防止进一步的请求发生 在滑动开始时设置标志,并使用回调取消设置标志
$('#menu > li').hover(function() {
$(this).find('ul').stop(true, true).slideDown();
}, function() {
$(this).find('ul').stop(true, true).slideUp();
});
第二个想法是由James Allardice在稍早的时候提出的,如果它能起作用,我更喜欢它。你介意使用简单的CSS吗?不,恐怕我需要它是js
$('#menu > li').hover(function() {
$(this).find('ul').stop(true, true).slideDown();
}, function() {
$(this).find('ul').stop(true, true).slideUp();
});
var closing = false;
$('#menu > li').mouseleave(function(){
closing = true;
$(this).find('ul').slideUp(null, function(){
closing = false;
});
});
// then in the hover method you would just check the value of closing to see if to allow or not opening.