小谷实战Jquery(三)--横向纵向菜单

        每天一个实例看来速率有点低了,今天要多做一点.好了,这次实现的是一个简单的菜单,Web项目中常见的菜单有两种:纵向和横向.从纵向说起,看一下最初的代码.

html代码实现最基本的菜单与子菜单

<span style="font-size:18px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=gb2312" />
<title>实战-菜单效果</title>
<meta http-equiv-"Content-Type" content="text/html;charset-UTF-8" />
<link type="text/css" rel="stylesheet" href="menu.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="menu.js"></script>

</head>
<body>
<ul>
	
	<li class="main">
		<a href="#">菜单项1</a>
		<ul>
			<li><a href="#">子菜单项11</a></li>
			<li><a href="#">子菜单项12</a></li>
		</ul>
	</li>
	
	<li class="main">
		<a href="#">菜单项2</a>
		<ul>
			<li><a href="#">子菜单项21</a></li>
			<li><a href="#">子菜单项22</a></li>
		</ul>
	</li>
	<li class="main">
		<a href="#">菜单项3</a>
		<ul>
			<li><a href="#">子菜单项31</a></li>
			<li><a href="#">子菜单项32</a></li>
		</ul>
	</li>
	

</ul>
</body>
</html></span>


       用<ul>和<li>标签创建的是带有项目符号的列表.,所以接下来我们还要通过CSS设置去除部分样式,以及设置菜单与子菜单不同的背景色或背景图,文字格式等.

<span style="font-size:18px;">ul li{
	/*消除ul和li上默认的小圆点*/
	list-style:none;
}
ul{
	/*清除子菜单的缩进值*/
	padding:0;
	
}
.main{
background-image:url(images/title.gif);
background-repeat:repeat-x;
width:120px;
}
li{
background-color:#EEEEEE;
}
a{
/*取消所有的下划线*/
text-decoration:none;
padding-left:20px;
display:block;
display:inline-block;
width:100px;
padding-top:3;
padding-bottom:3;

}
.main a{
color:white;
background-image:url(images/collapsed.gif);
background-repeat:no-repeat;
background-psition:3px center;
}
.main li a{
color:black;
background-image:none;

}
.main ul{
display:none;
}
</span>


最后js实现主菜单单击显示或隐藏子菜单.

<span style="font-size:18px;">$(document).ready(function(){
	//给主菜单注册click事件,点击时显示被隐藏的子菜单项
	$(".main > a").click(function(){
		
		//找到主菜单项对应的子菜单项
		var ulNode=$(this).next("ul");
		if (ulNode.css("display")=="none"){
			ulNode.css("display","block");
		}else{
			ulNode.css("display","none");
		}
		
    });
})</span>

一个基本的纵向菜单就算完成了.看一下Web页面的效果.

         

        细心的朋友一定发现了菜单展开状态下的图标是不一样的,而上面js中并没有相关函数的实现代码.是的,这是因为我在实现横向菜单设计后(包括图标变化的改进)又在原来代码中添加了一句:changeIcon($(this));关于这个函数的实现在后面的横向菜单中展示.


横向菜单:

       html代码基本一样,这里写在一个文件中,故只改了class="hmain". 而CSS代码也基本一致,只是对其中公共的部分加入".hmain",所有的样式即应用到该类标签下.所以,从纵向菜单到横向菜单的修改,只是分分钟的事!



上面提到的那个改变图标的功能在下面的js中:

$(document).ready(function(){
	//横向菜单
	//当鼠标滑过时,显示或隐藏子菜单项,并改变主菜单图标
	$(".hmain").hover(function(){
		    $(this).children("ul").slideDown();			
			changeIcon($(this).children("a"));
		},function(){
			$(this).children("ul").slideUp();
			changeIcon($(this).children("a"));
		});
	
})
// 修改主菜单的指示图标
function changeIcon(mainNode){
	if(mainNode){
		if(mainNode.css("background-image").indexOf("collapsed.gif")>=0){
			mainNode.css("background-image","url('images/expanded.gif')");
		}else{
			mainNode.css("background-image","url('images/collapsed.gif')");
		}
			
	}
}

所谓的横向菜单就是这个样子滴:


       下面我总结了一下主要用到的技术.

       构建多层菜单可以通过ul和li嵌套来实现,li是有缩进的.做Web开发一定要尽力使自己写的页面在各个浏览器都正常显示,这个过程最头疼就是IE,比如清除子菜单的缩进,只有padding和margin都为0的时候才可以在IE6和7中正常显示.除此之外,IE6以外的浏览器都可以通过设定display的值为block来让a元素充满所在的区域.只有IE6需要设定display为inline-black并设定a的宽度.另外一点就是如果一个元素上同时定义了背景图和背景色,那么浏览器会选择使用哪一个?答案是背景图.

      上面的js代码通过if语句判断,如果子菜单隐藏则单击主菜单时显示,如果显示则单击时隐藏.不知道朋友是否还记得jQuery的宗旨:write less, do more.所以,我们可以用这样一句话来代替上面的N行代码:ulNode.slideToggle(); toggle方法的强大之处在于,它省去了我们判断元素是显示还是隐藏的状态,直接让显示的隐藏,隐藏的显示.

      jQuery的学习还在继续,一路走,一路收获.



小谷实战Jquery(三)--横向纵向菜单,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。