2012-06-09 432 views
0

我正在建立一種下拉菜單,明顯地我希望我的子菜單項保持隱藏狀態,直到用戶將鼠標懸停在適當的元素上並讓它們顯示爲止。我的問題是我得到這個令人討厭的淡入/淡出效果,我無法讓它工作,任何人都可以請幫我理清這個問題嗎? You can find my code here使用jQuery下拉菜單的惡劣效果

HTML代碼:

<nav id="mainNav"> 
    <ul> 
     <li class="topMenu"><a href="#">Section #1</a></li> 
     <li class="topMenu"><a href="#">Section #2</a></li> 
     <li class="topMenu"><a href="#">Section #3</a> 
      <ul> 
       <li><a href="#">SubMenu Item #1</a></li> 
       <li><a href="#">SubMenu Item #2</a></li> 
       <li><a href="#">SubMenu Item #3</a></li> 
      </ul> 
     </li> 
     <li class="topMenu"><a href="#">Section #4</a> 
      <ul> 
       <li><a href="#">SubMenu Item #1</a></li> 
       <li><a href="#">SubMenu Item #2</a></li> 
       <li><a href="#">SubMenu Item #3</a></li> 
       <li><a href="#">SubMenu Item #4</a></li> 
       <li><a href="#">SubMenu Item #5</a></li> 
      </ul> 
     </li> 
     <li class="topMenu"><a href="#">Section #5</a> 
      <ul> 
       <li><a href="#">SubMenu Item #1</a></li> 
       <li><a href="#">SubMenu Item #2</a></li> 
      </ul> 
     </li> 
     <li class="topMenu"><a href="#">Section #6</a></li> 
    </ul> 
</nav> 

CSS

body { 
    width: 960px; 
    margin: 0 auto; 
} 

a { 
    text-decoration: none; 
} 

div#menu { 
    width: 960px; 
    height: 50px; 
    background-color: #000; 
    border-bottom: 2px solid #ff0078; 
} 

div#menu nav#mainNav a { 
    font-family: 'BebasNeueRegular', 'Arial, Helvetica, sans-serif'; 
    color: #e4e4e4; 
    text-transform: uppercase; 
    font-size: 20px; 
} 

div#menu nav#mainNav ul li { 
    top: 17px; 
    left: 25px; 
    margin-right: 30px; 
    display: inline; 
    position: relative; 
} 

div#menu nav#mainNav ul li ul { 
    display: none; 
    position: absolute; 
    top: 25px; 
    width: 150px; 
} 

div#menu nav#mainNav ul li ul li { 
    display: block; 
    left: 0; 
    margin-bottom: 5px; 
    padding: 5px; 
    background: #000; 
} 

div#menu nav#mainNav ul li ul li:hover { 
    border-bottom: 1px solid #ff0078; 
} 

div#menu nav#mainNav ul li ul li a { 
    display: block; 
}​ 

JS腳本

$(document).ready(function() { 
    var menuItems = $('div#menu nav#mainNav ul').find('li.topMenu'); 

    menuItems.on('mouseover', function() { 
     var submenu = $(this).find('ul'); 
     $(this).find('ul').fadeIn(); 
    }); 

    menuItems.on('mouseout', function() { 
     var submenu = $(this).find('ul'); 
     $(this).find('ul').fadeOut(); 
    }); 
});​ 
+0

請你的代碼添加到您的OP; [問題應該是完全獨立的](http://sscce.org)。否則,當小提琴死了你的問題是沒有意義的。 – Sparky

+2

'mouseenter()'和'mouseleave()'更像你想要的。 – Sparky

+0

你寫

  • SubMenu Item #1
  • 但可能是你可以簡化爲
  • SubMenu項目#1
  • 因爲你沒有在你的href中指定一個URL。 – frenchie

    回答

    1

    之前,你動畫的屬性,你應該隨時停止運行之前的動畫,否則你會得到討厭的效果

    見新jsFiddle

    $(document).ready(function() { 
        var menuItems = $('div#menu nav#mainNav ul').find('li.topMenu'); 
    
        menuItems.on('mouseover', function() { 
         var submenu = $(this).find('ul'); 
         $(this).find('ul').stop().fadeIn(); 
        }); 
    
        menuItems.on('mouseout', function() { 
         var submenu = $(this).find('ul'); 
         $(this).find('ul').stop().fadeOut(); 
        }); 
    });​ 
    
    +0

    我甚至會添加,而不是.fadeIn(),你應該使用.fadeTo()是這樣的:$(this).find('ul')。stop()。fadeTo ('中',100);將鼠標放在第5部分,快速轉到第4部分,並快速轉到第4部分的第一個子菜單。使用fadeTo。 – frenchie

    0

    試試這個JS:

    $(document).ready(function() { 
        var menuItems = $('div#menu nav#mainNav ul').find('li.topMenu'); 
    
        menuItems.hover(
         function() { 
          var submenu = $(this).find('ul'); 
          $(this).find('ul').fadeIn(); 
         }, 
         function() { 
          var submenu = $(this).find('ul'); 
          $(this).find('ul').fadeOut(); 
        }); 
    }); 
    

    +0

    試圖已經,它沒有解決。 – haunted85

    +0

    在這裏顯示你的js文件。 –

    +0

    而不是'menuItems.on',你應該嘗試'menuItems.hover'。 http://jsfiddle.net/Vz6QH/ –