2011-05-18 83 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