2011-05-18 48 views
1

有一个简单的问题,它看起来不像HoverIntent可以解决的问题。我有2个元素(可以说是一个按钮和一个div),1个元素是触发器来启动div扩展,这是由mouseenter事件触发的(这将是HoverIntent的合适候选人)。Jquery mouseleave delay

但是,当鼠标离开扩展div一段时间后,我需要再次收缩,但是如果它们重新输入div,它不应该收缩。大多数hoverintent样式插件会给我这个功能,但只有1个元素,并且一个元素控制扩展(button - mouseenter),另一个控制合同(div - mouseleave)。

我知道我可以编写一些代码来执行setTimeout来延迟一段时间,并确保鼠标仍然在该区域之外,但是我宁愿使用预制插件(如果存在的话)。

所以任何人都可以建议这是否存在?

- 编辑 -

编辑对上述问题做出明确规定的主要目的部分是阻止它收缩DIV如果鼠标再次进入一个特定的时间量内的股利,可以说2秒。所以div应该在mouseenter按钮上展开,然后在鼠标离开div = 2秒时收缩。

回答

2

不是这样的?

$('.hover-items').each(function(idx, el){ 
    $(el).mouseenter(function() { 
    $(this).slideDown(300); 
    $('#target_div').unbind().mouseleave(function() {$(this).slideUp(300)}); 
    }); 
}); 

解除绑定是在那里,以便您不会束缚与绑定到元素的一堆事件。只需重置并去。


添加为了满足问题的解释。

$('.hover-items').each(function(idx, el){ 
    $(el).mouseenter(function() { 
    clearTimeout($(el).data('timer')); 
    $('#target_div').slideDown(300) 
     .unbind() 
     .mouseleave(function() { 
     var closure = function(){$('#target_div').slideUp(300)}; 
     $(el).data('timer', setTimeout(closure,2000)); 
    }); 
    }); 
}); 
+0

...警告!发现了Typo! :) – 2011-05-18 09:03:14

+0

它看起来像上面只是增加了一个延迟滑动,我需要它,所以如果在延迟他们重新输入div它不会收缩,这可能不会在我的初始发布清楚,所以将编辑它。 – Grofit 2011-05-18 09:36:57

+0

我已修改代码以尝试满足您的说明。 – 2011-05-18 10:27:13