阻止Javascript函数多次触发

时间:2012-08-25 04:15:36

标签: javascript jquery javascript-events

jsFiddle
我使用一个自定义的下拉菜单,该菜单在jquery事件和动画上运行。
当我通过mouseenter激活下拉菜单几次时会出现问题,这会导致菜单向下滑动然后向上滑动几次。我尝试通过添加.stop(true)来修复它,这是成功的,但它导致了其他问题,如this. 我遵循了这个建议(jsFiddle Here),但它导致了更多没有吸引力的问题。

我需要一种方法来阻止一个函数被冗余地触发,但是仍然可以立即停止“向下滑动”,然后如果用户触发则“向上滑动”.mouseleave

我和自定义队列纠结了5个小时,没有成功:(
欢迎任何想法,建议和批评。

1 个答案:

答案 0 :(得分:1)

基本上它归结为延迟事件处理程序的执行。

var mouseoverTimer = null;    

$('.elem').mouseover(function(){

   clearTimeout(mouseoverTimer); //ignore previous trigger

   mouseoverTimer  = setTimeout(function(){ //wait to execute handler again
     //execute actual handler here
   }, 10);
});

如果在指定的时间间隔内调用了相同的处理程序,则取消挂起的执行并再次排队等待执行10ms以后,希望在该时间间隔内没有后续触发器。