文章來自LearnShare,轉載請注明。
分享自己寫的基于jQuery的手風琴菜單,包括橫向和縱向兩種,會不斷豐富它的功能,友善自己和大家使用。
Updates:
————————————————————————————————————————————————————————————
@2012-12-12 version 0.3
加入了可選的菜單行為互斥,即菜單項不同時展開。通過“mutex”變量指定。效果預覽:縱向v3
————————————————————————————————————————————————————————————
@2012-12-10 version 0.2
加入了可選的子菜單動畫效果,通過“animation”變量指定,也可擴充自定義動畫。效果預覽:縱向v2
————————————————————————————————————————————————————————————
@2012-12-05 version 0.1
AccordionMenu的子菜單可以通過點選展開或關閉。
————————————————————————————————————————————————————————————
最早接觸的手風琴菜單應該是QQ Player的設定界面,這個元件可以将無法一次性展示的菜單項或内容折疊起來,有利于菜單分組和内容的展示。
初次動手編寫手風琴菜單是在今年的暑期實習,項目是教學使用的網站,需要分章節展示内容,是以将側邊欄做成了目錄導航菜單,使用了三級目錄将數百項菜單折疊為章節篇三層,并使用jQuery的動畫效果延遲章節展開收縮的動作,整體效果很不錯。(本文将在最後的部分編寫一個類似的菜單)
HTML主要代碼:
<!--
* Widget: HUI.AccordionMenu
* Version: 0.1 V (@2012-12-05)
* Author: H-Labs (LearnShare)
*
*
-->
<div id="menu">
<div class="menu-item">
<div class="item-title">item 1</div>
<div class="item-content">content1</div>
</div>
<div class="menu-item">
<div class="item-title">item 2</div>
<div class="item-content">content2</div>
</div>
<div class="menu-item">
<div class="item-title">item 3</div>
<div class="item-content">content3</div>
</div>
</div>
<div id="menu">...</div> 部分是整個菜單;
<div class="menu-item">...</div> 部分是菜單項(首層)。在class中添加open屬性,可使該項預設展開;
<div class="item-title">...</div> 部分是菜單标題部分;
<div class="item-content">...</div> 是菜單内容部分。
CSS代碼省略
JS代碼:
/**
* Widget: HUI.AccordionMenu
* Version: 0.3 V (@2012-12-12)
* Author: H-Labs (LearnShare)
*/
var animation="slide"; // 設定折疊動畫:none 無動畫;slide 滑動;fade 淡入淡出
var mutex=1; // 設定菜單行為關系:0 無關;1 互斥(不同時展開)
$(document).ready(function(){
initMenus();
bindMenus();
});
/*
* 初始化菜單狀态,将所有class包含open的項目顯示出來
*/
function initMenus(){
$(".item-content").each(function(){
if($(this).parent().hasClass("open")){
$(this).show();
}else{
$(this).hide();
}
});
}
/*
* 監視點選事件,執行顯示或隐藏動作并設定或取消open狀态
*/
function bindMenus(){
$(".item-title").bind("click",function(){
var item=$(this).parent();
if(item.hasClass("open")){
hideItem($(this).next());
hideAllItems();
if(!mutex){
item.removeClass("open");
}
}else{
hideAllItems();
showItem($(this).next());
item.addClass("open");
}
});
}
/*
* 折疊所有已展開菜單項
*/
function hideAllItems(){
if(mutex){
$(".menu-item").each(function(){
if($(this).hasClass("open")){
hideItem($(this).find(".item-content"));
$(this).removeClass("open");
}
});
}
}
/*
* 折疊菜單項
*/
function hideItem(item){
switch(animation){
case "slide":
item.slideUp();
break;
case "fade":
item.fadeOut();
break;
default:
item.hide();
break;
}
}
/*
* 展開菜單項
*/
function showItem(item){
switch(animation){
case "slide":
item.slideDown();
break;
case "fade":
item.fadeIn();
break;
default:
item.show();
break;
}
}
效果預覽:
1.縱向v1
2.橫向v1
文章來自LearnShare,轉載請注明。