2012-07-10 153 views
2

首先,我覺得這個有點難以解釋,因爲英語不是我的母語。所以請原諒。jQuery懸停事件,防止功能被完全執行

我寫了一個小的通知函數,它在表單提交時觸發。正常行爲是:

  • 用戶提交表單
  • 注淡入
  • 延遲2秒
  • 注淡出

當音符盤旋,它擴展了css-transition。從邏輯上講,它不應該淡出,直到用戶將其摺疊mouseleave。 而這裏存在我的問題:只要div被徘徊,我如何防止fadeOut聲明被執行?

我想是這樣

if ($('#notification').hover()){ 
    return ; 
} 

但當然,第一條語句已經excuted如下所示:

http://jsfiddle.net/6DsJb/

我也嘗試了一些其他的東西,比如一個單獨的腳本正在收聽hover事件,然後致電$('#notification').show() ;

兩者都不起作用。我知道這是推理中的一個簡單錯誤,但是地獄,我被卡住了。

在此先感謝。

回答

1

fadeIn通話setTimeout後,用一個函數:

  • 如果通知被摺疊,隱藏它。
  • 否則,使用.mouseleave隱藏鼠標焦點後隱藏它。

即:

$('#notification').fadeIn(500); 

setTimeout(function() { 
    if (notification_is_collapsed) 
    $('#notification').fadeOut(500); 
    else 
    $('#notification').mouseleave(function() { 
     $('#notification').fadeOut(500); 
    }); 
}, 2000); 
+0

對不起,但我不明白這一點。 is_collapsed是不是表示這個音符已經消失了,如果不是,它不會和mouseleave動作一樣嗎? – Sprottenwels 2012-07-11 06:35:47

+0

'notification_is_collapsed'應該被替換爲評估在2秒鐘過去之前筆記是否已經被摺疊的東西。 – WhyNotHugo 2012-07-11 11:45:51

+0

再次感謝,我明白了,雖然有點不同: http:// pastebin。com/6gpJTgKc – Sprottenwels 2012-07-12 14:21:09

1

懸停功能需要兩個參數:當鼠標進去,而當鼠標離開(http://api.jquery.com/hover/

所以你可以做這樣的事情,而不是:

$('#notification').hover(
function() {}, function() { 
    $(this).delay(500).fadeOut(500); 
}); 

這裏是你的jsfiddle更新:http://jsfiddle.net/6DsJb/1/

+0

謝謝,但這隻能在沒有自動裝填的情況下運行,所以用戶必須明確地懸停註釋才能擺脫它。我與延遲autofade結合使用,但它仍然覆蓋它。 – Sprottenwels 2012-07-11 06:33:00