2013-01-04 49 views
4

這是隱藏在懸停/顯示菜單項... 我的js的菜單我有這樣一個菜單:jQuery的菜單OnMouseEnter在和鼠標離開奇怪的行爲

<ul class="main"> 
     <li class="acro_jq_menu"> 
      <a href="" title="How to">How to one </a> 
      <ul> 
       <li>item21</li> 
       <li>ite222m1</li> 
       <li>item1</li> 
      </ul> 
     </li> 
     <li class="acro_jq_menu"> 
      <a href="" title="How to">How to Two </a> 
      <ul> 
       <li>item1</li> 
       <li>it2em1</li> 
       <li>it41em1</li> 
      </ul> 
     </li> 
    </ul> 

這是JavaScript的:

function slideMenu() { 
var items = $('.main li.acro_jq_menu'); 
     items.bind({ 
      mouseenter: function(e) { 
       $(this).find('>ul').css({ 
        'opacity':0 
       }).show().animate(

       { 
        'opacity':1 
       }, 
       500); 
      }, 
      mouseleave: function(e) { 
       $(this).find('>ul').fadeOut(100, function() { 
        $(this).hide(); 
       }) 
      } 
     }); 
} 

$(document).ready(function(){ 
     slideMenu(); 
    });​ 

一切工作正常,但有時當我的鼠標離開目前li這個列表項內容隱藏太久(超過2秒左右),有時內容根本沒有顯示。我認爲jQuery代碼有問題,但我無法弄清楚。

這裏的鏈接我的代碼的jsfiddle例如:link

+0

+1的jsfiddle鏈接 – bendewey

+0

下面是一個例子網站,我的菜單看起來如何,應該行爲http://www.homebuilding.co.uk/,主要manu –

+0

我不能再現任何奇怪的行爲。 (使用Firefox和Chrome) – Tapirboy

回答

3

嘗試停止在事件的所有動畫:

http://jsfiddle.net/6hZuV/4/

function slideMenu() { 
var items = $('.main li.acro_jq_menu'); 
     items.bind({ 
      mouseenter: function(e) { 
       $(this).stop(true, true).find('>ul').css({ 
        'opacity':0 
       }).show().animate(

       { 
        'opacity':1 
       }, 
       500); 
      }, 
      mouseleave: function(e) { 
       $(this).stop(true, true).find('>ul').fadeOut(100, function() { 
        $(this).hide(); 
       }) 
      } 
     }); 
} 
+0

嘿,yep動畫停止了,這個工作正如我在Chrome和Firefox中看到的,很好:/ –

+2

當它被回答時,已經過了一半:http://jsfiddle.net/6hZuV/11/一個稍微不同的方式來做你想做的事,並且總是意味着動畫從頭開始,當進入或離開 – Pete

+0

感謝皮特,要檢查它 –