2013-11-02 67 views
8

我有這個jQuery代碼的一個問題:JQuery的懸停環

$(".item").mouseenter(function(){ 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
}).mouseleave(function(){ 
    $(this).stop(); 
    $(this).addClass("item"); 
    $(this).removeClass("active"); 
    $(".item").show(700); 
}); 

,這是我的HTML:

<ul> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
    <li class="item">Item</li> 
</ul> 

我想,當我做一個項目懸停,其他項目是隱藏,代碼工作正常,但問題是,如果我在隱藏持續時間(700毫秒)懸停另一個項目,它會使隱藏/顯示項目循環。我能做些什麼來防止這種情況發生。

jsFiddle

注:我想懸停項目開始到離開,不保持固定。

+0

壞UI的概念僅僅是因爲你無法避免另一徘徊,由於浮動。當他們動畫時,他們轉移職位。爲您設置動畫不透明效果嗎? – charlietfl

回答

3

您使用的是float: leftli元素..所以ul沒有寬度和高度。應用此CSS:

ul { 
    overflow: auto; 
} 

,也是我取得了jQuery的一些變化:

$(".item").on('mouseenter', mEnter) 
$('ul').on('mouseleave', function() { 
    $('.item').stop(); 
    $('.active').removeClass("active") 
     .addClass("item"); 
    $(".item").show(700); 
}); 

function mEnter() { 
    $(this).addClass("active"); 
    $(this).removeClass("item"); 
    $(".item").hide(700); 
} 
你申請 mouseleave事件給個體徘徊 LI元素,而不是即 UL父元素

Working Fiddle

+0

很好地完成了...這似乎正如OP所打算的那樣工作。 – Charlie74

+0

順便說一句,沒有必要包裝在一個函數..我只是做了測試。 –

+0

完美和感謝好友... –