2012-08-25 71 views
0

jsFiddle
我使用了一个定制的下拉菜单,它运行在jQuery事件和动画上。
当我通过mouseenter激活下拉菜单多次时会出现问题,导致菜单向下滑动几次。我试图通过添加.stop(true)来解决这个问题,但它导致了其他问题,如this. 我遵循该建议(jsFiddle Here),但它会导致更多不吸引人的问题。

我需要的是一种方法来阻止来自发射冗余的功能,但仍然能够停止“滑下”马上,然后“向上滑动”,如果用户触发.mouseleave

我定制队列纠结了好5小时后,没有成功:(
任何想法,建议和批评是值得欢迎的。防止多次使用Javascript函数

+0

也许如果你检查合适的条件来停止代码并返回false? –

+2

这听起来像你可能正在寻找[debouncing](http://unscriptable.com/2009/03/20/debouncing-javascript-methods/)。 – zzzzBov

回答

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); 
}); 

如果相同的处理程序在指定的时间间隔内呼叫挂起的前例ecution被取消并且再次排队以执行10ms之后希望在该间隔内没有后续触发。