不积跬步,无以至千里;不积小流,无以成江海。

基于Jquery写的一个手风琴效果的折叠菜单

HTML/JS 康康 2388℃ 0评论

由于项目中子页面需要一个小菜单,找一个菜单插件太大材小用,又怕和当前项目中的菜单不兼容,所以动手自己写了一个,我取名为MINIMenu,因为只有几十行代码。。。

HTML代码

 <div id="menu">

<div class="menu-item">

<div class="item-title">

<a class="active" href="#">菜单一</a></div>

<ul class="item-ul">

<li><span>|--</span><a href="#">模块1</a></li>

<li><span>|--</span><a href="#">模块2</a></li>

<li><span>|--</span><a href="#">模块3</a></li>

<li><span>|--</span><a href="#">模块4</a></li>

</ul>

</div>

<div class="menu-item">

<div class="item-title"><a href="#">菜单二</a></div>

<ul class="item-ul">

<li><span>|--</span><a href="#">模块1</a></li>

<li><span>|--</span><a href="#">模块2</a></li>

</ul>

</div>

<div class="menu-item">

<div class="item-title">

<a href="#">菜单三</a>

</div>

</div>

</div>

Javascript代码

依赖jquery : <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

             
/*  
* 初始化菜单状态,将所有class包含open的项目显示出来 
*/  
function MINIMenus(settings){  
	//默认参数
	var defaultSetting = {
	 animation:"slide",  // 设置折叠动画:none 无动画;slide 滑动; fade 淡入淡出  
	 mutex:true, // true(互斥,菜单只能有一个展开),false(不互斥,每个菜单都能展开)  
	 meunId:"#menu",
	} ;
	$.extend(defaultSetting,settings); 
	initMenus(defaultSetting.meunId);
	bindMenus(defaultSetting.meunId,defaultSetting.mutex,defaultSetting.animation);
}  

/**
 * [initMenus 初始化菜单,展开所有open的项目]
* 
 */
function initMenus(menuID){
    $(menuID).find(".item-ul").each(function(){  
	if($(this).parent().hasClass("open")){  
	    $(this).find("li").show();  
	}else{  
	    $(this).find("li").hide();  
	 }  
    });  
}
/*  
* 绑定点击事件
*/  
function bindMenus(menuID,mutex,animation){  
	$(menuID).find(".item-title").bind("click",function(){  
	var item=$(this).parent();  
	listSize = (item.find(".item-ul li")).length;
	 //判断是否有展开项
	if(listSize>0){
	if(item.hasClass("open")){  
	 hideItem($(this).next(),animation);  
	 hideAllItems(menuID,mutex,animation);  
	  if(!mutex){  
	    item.removeClass("open");  
	   }  
	 }else{  
	   hideAllItems(menuID,mutex,animation);  
	   showItem($(this).next(),animation);  
	   item.addClass("open");  
	}  
      }
   });  
}  
/* 
* 折叠所有已展开菜单项 
*/  
function hideAllItems(menuID,mutex,animation){  
   if(mutex){  
	$(menuID).find(".menu-item").each(function(){  
	if($(this).hasClass("open")){  
	   hideItem($(this).find(".item-ul"),animation);  
	   $(this).removeClass("open");  
	 }  
	});  
    }  
}  
/* 
* 折叠指定.item-ul下的li元素
*/  
function hideItem(item,animation){  
    item.find("li").each(function(){  
	    switch(animation){  
	        case "slide":  
	            $(this).slideUp();  
	            break;  
	        case "fade":  
	            $(this).fadeOut();  
	            break;  
	        default:  
	            $(this).hide();  
	            break;  
	    }  
	})
}  
/* 
* 展开指定.item-ul下的li元素
*/  
function showItem(item,animation){  
   item.find("li").each(function(){  
	    switch(animation){  
	        case "slide":  
	            $(this).slideDown();  
	            break;  
	        case "fade":  
	            $(this).fadeIn();  
	            break;  
	        default:  
	            $(this).show();  
	            break;  
	    }  
    })
}  

CSS样式

             
 ul{
	list-style: none;
	padding:0;
	margin: 0;
}
#menu{
	max-width:14%;
	min-height: 500px;
	color:#333;
	background: #fff;
	margin-right:8px;
}
#menu .active{
	background: #5eb95e;
	color: #fff;
}
.menu-item{
	text-align: center;
	width: 100%;
	cursor: pointer;
	margin-bottom:8px;
}
.menu-item  a{
	padding: 6px 0;
	border-top: 1px solid #eee;
	background:#e8e8e8;
	border-radius: 6px;
	display: block;
	color:#333;
	text-decoration: none;
}
.menu-item a:hover,.menu-item .item-ul a:hover{
	background: #5eb95e;
	color: #fff;
}
.menu-item .item-ul{
	margin-top: 8px;
}
.menu-item .item-ul li{
	margin: 5px 0;
}
.menu-item .item-ul span{
	display: inline-block;
	width: 20%;
}
.menu-item .item-ul a{
	display: inline-block;
	padding: 5px 0;
	background: #e8e8e8;
	text-decoration: none;
	color: #333;
	width: 80%;
	border-radius: 5px;
}
.item{
	margin-bottom:8px;
}

使用

使用 new MINIMenus({}); 初始化即可

默认参数:

var defaultSetting = {

animation:"slide",    // 设置折叠动画:none 无动画;slide 滑动; fade 淡入淡出

mutex:true,            // true(互斥,菜单只能有一个展开),false(不互斥,每个菜单都能展开)

meunId:"#menu",   //菜单所在的ID

} ;

在.menu-item 加上class='open' 将展开该菜单下的所有子菜单

在 a标签加上class='active'  显示被选中的效果

 $(document).ready(function(){  
        new MINIMenus({
	   mutex:false,
       });
}); 

效 果

demo演示:

MINIMenu

转载请注明:左手代码右手诗 » 基于Jquery写的一个手风琴效果的折叠菜单

喜欢 (3)or分享 (0)
发表我的评论
取消评论

 

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址