原创JavaScript Jquery特效之----多重特效折叠菜单(附带详细注释和算法思路)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>折叠菜单</title>
		<script type="text/javascript" src="js/jquery-2.1.0.js"></script>
		<script type="text/javascript" src="js/foldMenu.js" ></script>
		<style type="text/css">
			* {
				padding: 0;
				margin: 0;
			}
			#FoldingMenuBar {
				margin: 200px;;
			}
			li {
				list-style: none;
			}
			.left {
				float: left;
			}
			.TotalMenu {
				float: left;
			}
			.TotalMenu li{
				height: auto;
				overflow:auto;
			}
			.menuBody{
				position: relative;
				display: none;
			}
			.ulMenuBody{
				float:left;
				width: 220px;
			}
			.ulMenuBody{
				display: none;
				position: relative;
			}
			.ulMenuBody li{
				width: 220px;
				height: 34px;
				background: white;
				border-top: 1px solid #ccc;
				line-height: 34px;
				text-indent: 50px;
			}
			.ulMenuBody li:hover{
				background:#0099FF;
			}
			.menuHeader{
				height: 35px;
				width: 220px;
				background:#DA0A0A;
				line-height: 34px;
				cursor: pointer;
				text-align: center;

			}
		</style>
	</head>
	<body>
		<div id="FoldingMenuBar">
			<ul class="TotalMenu">
				<li class="firstMenu">
					<div class="menuHeader">
						<span>第一期</span>
					</div>
					<div class="menuBody">
						<ul class="ulMenuBody">
							<li><a href="#">公司名称11</a></li>
							<li><a href="#">公司名称11</a></li>
							<li><a href="#">公司名称11</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
						<ul class="ulMenuBody">
							<li><a href="#">公司名称12</a></li>
							<li><a href="#">公司名称12</a></li>
							<li><a href="#">公司名称12</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
						<ul class="ulMenuBody">
							<li><a href="#">公司名称13</a></li>
							<li><a href="#">公司名称13</a></li>
							<li><a href="#">公司名称13</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
						<ul class="ulMenuBody">
							<li><a href="#">公司名称14</a></li>
							<li><a href="#">公司名称14</a></li>
							<li><a href="#">公司名称14</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
					</div>
				</li>
				<li class="secondMenu">
					<div class="menuHeader">
						<span>第二期</span>
					</div>
					<div class="menuBody">
						<ul class="ulMenuBody">
							<li><a href="#">公司名称21</a></li>
							<li><a href="#">公司名称21</a></li>
							<li><a href="#">公司名称21</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
						<ul class="ulMenuBody">
							<li><a href="#">公司名称22</a></li>
							<li><a href="#">公司名称22</a></li>
							<li><a href="#">公司名称22</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
					</div>
				</li>
				<li class="thirdMenu">
					<div class="menuHeader">
						<span>第三期</span>
					</div>
					<div class="menuBody">
						<ul class="ulMenuBody">
							<li><a href="#">公司名称31</a></li>
							<li><a href="#">公司名称31</a></li>
							<li><a href="#">公司名称31</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
						<ul class="ulMenuBody">
							<li><a href="#">公司名称32</a></li>
							<li><a href="#">公司名称32</a></li>
							<li><a href="#">公司名称32</a></li>
							<li><button class="PreviousPage">上一页</button>
								<button class="NextPage">下一页</button>
							</li>
						</ul>
					</div>
				</li>
			</ul>
		</div>
		<div id="divTemp">
			调试输出
		</div>
	</body>
</html>
$(document).ready(function () {
	//一个menuHeader下方有一个menuBody
	var menuHeader=$(".menuHeader");
	var menuBody=$(".menuBody");
	var divTemp=document.getElementById("divTemp");
	var moveTime=300;
	var globalMoveLock=false;//全局动画锁
	menuHeader.each(function(i){
		$(this).click(function(){
			if($(menuBody[i]).css("display") == "block"){
				$(menuBody[i]).slideUp(300);
			}
			else{
				//遍历所有menuBody并且关闭所有menuBody,再打开当前menuBody
				menuBody.each(function(i){
					if($(this).css("display") == "block"){
						$(this).slideUp(300);
					}
				});
				//显示点击项(先查看menuBody[i].children是否全部隐藏,是则显示其中一项)
				var flag=false;
				$(menuBody[i].children).each(function(){
					if($(this).css("display") == "none" && $(this).css("opacity")=="1"){
						flag=true;
					}
					else{
						//本段代码似乎不可能执行到....
						flag=false;
					}
				});
				if(flag==true){
					//当menuBody[i].children全部不可见时,显示第一项
					$(menuBody[i].children[0]).css("display","block");
				}
				$(menuBody[i]).slideDown(300);
			}
		});
	});
	//获取所有上一页按钮按钮,下一页按钮
	var preBtns=$(".PreviousPage");
	var nexBtns=$(".NextPage");
	//所有上一页按钮
	preBtns.each(function(){
		$(this).click(function(){
			//$(this.parentNode.parentNode).animate({right:'220px'});
			//先获取点击区域的MenuBody,和该区域的所有ulMenuBody
			var menuBodys=this.parentNode.parentNode.parentNode;
			var ulMenuBodys=menuBodys.children
			var index=-1;
			//判断哪一个ulMenuBody是可见的,可见的即代表是当前的ulMenuBody,并记录下标
			$(ulMenuBodys).each(function(i){
				//下行判断必须用!=0而不是==1(因为需要动画执行完毕才==1)
				if($(this).css("opacity") != "0"){
					index=i;
					return false;
				}
			});
			//alert(index);
			if(ulMenuBodys[index-1]!=undefined){
				//点击上一页,整体向右动,当前块需要隐藏同时透明度设置为0,动画停止后最后透明度设置为1
				//$(ulMenuBodys[index+1]).css("display","block");
				$(menuBodys).animate({right:"-=220px"},moveTime);
				$(ulMenuBodys[index]).animate({opacity:"0"},moveTime,function(){
					$(ulMenuBodys[index]).css("opacity","1").css("display","none");
				});
			    $(ulMenuBodys[index-1]).animate({opacity:"1"},moveTime);
			}
		})
	});
	//所有下一页按钮
	nexBtns.each(function(){
		$(this).click(function(){
			//$(this.parentNode.parentNode).animate({right:'220px'});
			//先获取点击区域的MenuBody,和该区域的所有ulMenuBody
			var menuBodys=this.parentNode.parentNode.parentNode;
			var ulMenuBodys=menuBodys.children
			var index=-1;
			//判断哪一个ulMenuBody是可见的,可见的即代表是当前的ulMenuBody,并记录下标
			$(ulMenuBodys).each(function(i){
				//下行判断必须用!=0而不是==1(因为需要动画执行完毕才==1)
				if($(this).css("opacity") != "0"){
					index=i;
					//divTemp.innerHTML="index="+index;
					return false;
				}
			});
			if(ulMenuBodys[index+1]!=undefined && globalMoveLock==false){
				//moveLock();
				//先设置成可见,透明度为0,再慢慢将透明度提高到1
				$(ulMenuBodys[index+1]).css("display","block")
				.css("opacity","0")
				.animate({opacity:"1"},moveTime);
				$(menuBodys).animate({right:"+=220px"},moveTime);
			    $(ulMenuBodys[index]).animate({opacity:"0"},moveTime);
			    //divTemp.innerHTML+="index="+index;
			}
		})
	});
});

function moveUnLock()
{
	globalMoveLock=false;
}
function moveLock()
{
	globalMoveLock=true;
}

时间: 2024-08-07 05:30:57

原创JavaScript Jquery特效之----多重特效折叠菜单(附带详细注释和算法思路)的相关文章

18款jquery抽屉式手风琴导航特效代码分享

jquery hover抽屉式导航图片展开收缩代码 jQuery仿瑞丽鼠标滑过图片手风琴展开特效 jQuery扁平风格的图标导航手风琴切换代码 jQuery左右滑动手风琴轮播切换特效 jQuery仿AnG无双科技滑动手风琴特效源码 jquery图片信息列表选项卡左右切换代码 jQuery hover水滴导航切换选项卡栏目代码 jquery手风琴菜单制作横向菜单切换手风琴效果代码 jquery水平滑动手风琴菜单鼠标点击图片展示手风琴菜单代码 jQuery仿艺龙旅行网图片手风琴特效 jQuery C

18款jquery抽屉式手风琴导航特效代码

jquery hover抽屉式导航图片展开收缩代码 jQuery仿瑞丽鼠标滑过图片手风琴展开特效 jQuery扁平风格的图标导航手风琴切换代码 jQuery左右滑动手风琴轮播切换特效 jQuery仿AnG无双科技滑动手风琴特效源码 jquery图片信息列表选项卡左右切换代码 jQuery hover水滴导航切换选项卡栏目代码 jquery手风琴菜单制作横向菜单切换手风琴效果代码 jquery水平滑动手风琴菜单鼠标点击图片展示手风琴菜单代码 jQuery仿艺龙旅行网图片手风琴特效 jQuery C

网友微笑分享原创Jquery实现瀑布流特效

首先非常感谢网友微笑的无私分享,此Jquery特效是一款非常流行和实用的瀑布流布局,核心代码只有几十行,是我见过代码量最少的瀑布流布局,非常适合网友们学习哦,希望大家好好看一下这个Jquery特效的原代码,里面的每个功能注释写得非常详细.. 主要包括了以下几个功能函数:1.瀑布流主函数2.获取高度最小的列的函数3.判断请求数据的开关的函数4.请求数据加载的样式的函数 瀑布流代码如下: JS与CSS代码 /** * 作者:微笑 * QQ:904835003 * 邮箱:[email protecte

JS三级折叠菜单特效 自动收缩其它级

真的很不错!很实用,在IE6.IE7.IE8.FF.chrome等浏览器都正常运行,去掉CSS中 #menu ul中 {height:100px; overflow:auto;} 即可高度自适应 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html x

一款基于javascript的3D玻璃破碎特效

之前为大家介绍了一款 html5 canvas实现图片玻璃碎片特效.今天要给大家带来一款基于javascript的3D玻璃破碎特效.效果图如下: 在线预览   源码下载 html代码: <div id="container"> <div id="fragment"> </div> </div> css代码: body { background-color: #f1f1f1; margin: 0; overflow: h

JQuery之动画与特效

学编程吧JQuery之动画与特效发布了,欢迎通过xuebiancheng8.com 显示与隐藏 show(spped,[callback])与hide(spped,[callback]) speed可选填slow.normal.fast,对应的速度分别为600ms.400ms.200ms.也可以直接填毫秒数,callback函数为回调函数,动作完成后调用此函数 [javascript] view plaincopyprint? $("img").show(3000,function()

jQuery元宵猜灯谜特效(元宵十五日猜一个字)

在线体验:http://keleyi.com/keleyi/phtml/jqtexiao/35.htm jQuery元宵猜灯谜特效的HTML代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>元宵十五日猜一个字 - 可乐义</title> <meta name="description" con

jQuery碎语(3) 动画特效

5.动画特效 ● 自制折叠内容块 内容块如下 <div class="module"> <div class="caption"> <span>标题</span> <img src="rollup.gif" alt="rollup" title="rolls up this module"/> </div> <div class=

jQuery图片轮播特效

效果预览:http://hovertree.com/texiao/jquery/51/ 这款特效有缩略图,包含文字说明和链接,可以自动播放,也可以手动切换. 使用的jQuery库版本为1.12.3 ,当然项1.11.1等也是可以的.下载地址:http://hovertree.com/h/bjaf/ati6k7yk.htm 效果图: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta chars