完整的程式碼放在 jsFiddle Bootstrap Mega Menu 。
我們管 Mega Menu 叫做“大選單”吧,“巨”、“超級”啥的,不足以彰顯我們的草根貴氣。
有道詞典:
Mega Menu: 大資料量網頁選單;超級選單式;巨型選單;超級選單。
基於Bootstrap Dropdown,實現一個大選單,有三個問題要解決:
選單容器的樣式
複用 Yamm!3 的關鍵樣式。
/** Copy from Yamm!3 http://geedmo.github.io/yamm3/ */
.mega .nav,
.mega .collapse,
.mega .dropup,
.mega .dropdown {
position: static;
}
.mega .container {
position: relative;
}
.mega .dropdown-menu {
left: auto;
}
.mega .mega-content {
padding: 20px 30px;
}
.mega .dropdown.mega-fw .dropdown-menu {
left: 0;
right: 0;
}
滑鼠事件
Bootstrap Dropdown 元件通過點選開啟選單,不符合大選單場景,需要修改成,滑鼠移入時開啟選單,滑鼠移出時關閉選單。
- 滑鼠移入時,顯示選單。
- 滑鼠移出時,隱藏選單。
- 滑鼠點選選單中的連結時,隱藏選單。
$(function() {
$(`body`)
.on("mouseenter", "li.dropdown", function() {
!$(`li.dropdown`).hasClass(`hover`) && $(this).addClass(`hover`);
})
.on("mouseleave", "li.dropdown", function() {
$(`li.dropdown`).hasClass(`hover`) && $(this).removeClass(`hover`);
})
.on("click", "a.menu-link", function() {
var $this = $(this);
setTimeout(function() {
$this.closest(`li.dropdown`).removeClass(`hover`);
}, 100);
});
});
自適應螢幕寬度
當螢幕尺寸小於768畫素時,選單會自動摺疊,恢復Bootstrap預設行為,通過點選來開啟選單。
有個取巧的方法,我們使用一個只在螢幕大於768畫素時生效的.hover
類,這樣一來,螢幕超過768畫素,選單是通過滑鼠進入開啟,而螢幕小於768畫素時,使用Bootstrap Dropdown的預設行為,即通過點選來開啟和關閉選單。
@media (min-width: 768px) {
/* disable dropping down on mouse click */
ul.nav li.open > ul.dropdown-menu {
display: none;
}
/* enable dropping down on mouse hover */
ul.nav li.dropdown.hover > ul.dropdown-menu {
display: block;
}
/* changing caret pointing direction on hover */
.nav .dropdown.hover .caret {
border-top: none;
border-bottom: 4px dashed;
}
}
完整的程式碼放在jsFiddle Bootstrap Mega Menu 。
參考資料: