2011-08-19 67 views
1

我正在網站上工作。我想要創建的菜單類型是在菜單中點擊某個項目的位置,並彈出一個子菜單。但是,您也可以將鼠標懸停在任何其他菜單項上,然後出現另一個子菜單,隱藏您點擊的第一個菜單項。您可以點擊任何地方關閉子菜單。使用HTML和Javascript創建Mac OS X標題欄樣式菜單

我希望這已經夠清楚了,並且希望您能給予的幫助。

+0

你有沒有看過像Ext JS http://www.sencha.com/products/extjs/或Dojo Toolkit http://dojotoolkit.org/? – shelleybutterfly

+0

是不是Windows菜單是如何工作的? – RobG

+0

我不太瞭解使用EXT JS或Dojo。除非他們具有我正在尋找的這些功能,否則我不會使用它們。 –

回答

0

Here's my very, very simple, cheap, brief, ugly, lazy, father-disappointing version。它使用jQuery,它可能實際上看起來不像你想要的。但它完成(我認爲)一個重要的事情:「鎖定」子菜單打開,直到打開另一個菜單,或者用戶單擊頁面上的其他位置。

的HTML看起來像這樣...

<ul> 
    <li> 
     <a class="author" href="#">Menu Item 1</a> 
     <ul class="books"> 
      <li><a class="book" href="#">Sub-Menu Item 1</a></li> 
      <li><a class="book" href="#">Sub-Menu Item 2</a></li> 
     </ul> 
    </li> 
    <!-- ... --> 
</ul> 

...這是JavaScript的:

(function ($) { 
    var $current, 
     closeSubMenu = function() { 
      if ($current) { 
       $current.slideUp(); 
      } 
     }, 
     openSubMenu = function (e) { 
      var $books = $(this).next(); 
      e.preventDefault(); 
      e.stopPropagation(); 
      if (!$current || $current[0] !== $books[0]) { 
       closeSubMenu(); 
       $current = $books; 
       $books.slideDown(); 
      } 
     }; 

    $(document).click(function (e) { 
      var $target = $(e.target); 
      if ($target.hasClass('author')) { 
       openSubMenu.call(e.target, e); 
      } else if ($target.hasClass('book')) { 
       e.preventDefault(); 
      } else { 
       closeSubMenu(); 
       $current = null; 
      } 
     }); 
    $('.books').slideUp(); 
}(jQuery)); 

如果不出意外,它應該幫助給你你怎麼做的一些想法決定去做。

+0

感謝您的回覆。我添加了這個代碼,它更接近我想要的。唯一的是我不想讓子菜單在懸停時自動打開。我希望你不得不點擊它來打開 –

+0

@Ian不是問題。你所要做的就是擺脫'.delegate(...)'的東西。我已更新我的代碼來演示。 – sdleihssirhc

+0

好的謝謝。任何方式使它,所以我點擊打開第一個,然後其餘的可以導航到懸停在他們的標題?兩種組合的方式,以及菜單欄在Mac OS X中的工作方式 –