JQuery制作无限级下导航拉菜单详解

以前也写过关于JQuery制作二级菜单的方法,今天自己彻底研究了一下无限级的下拉菜单,总结一下制作方法。相信无限级的会做了以后你就能掌握下拉菜单这个技术了。进入正题…

我先给出我的基本制作流程:

1.写出结构合理的xhtml。 主要用到列表ul的嵌套。

2.写好布局的CSS代码。 主要给子菜单定位和相关设置。

3.写出JQuery代码。 主要用到JQuery的一个hover()方法

一:xhtml

为了不至于太乱我们可以先研究一个菜单的xhtml代码。我写出了我认为比较合理的一种,如果你看起来吃力的话有个好办法就是抄十遍:

<li><a href="#">Menu1</a>	//.menu1是菜单的个数,可以整体copy
    <ul>	//.item的作用是为隐藏后面的li,.menu的作用是为JQuery提供循环
      <li><a href="#">Menu-item1</a></li>
      <li><a href="#">Menu-item2</a></li>
      <li><a href="#">Menu-item3</a></li>
      <li><a href="#">Menu-item4</a>
      	<ul>
              <li><a href="#">Menu-item1</a></li>
              <li><a href="#">Menu-item2</a></li>
              <li><a href="#">Menu-item3</a></li>
              <li><a href="#">Menu-item4</a></li>
         </ul>
      </li>
    </ul>
  </li>

注意:这里我只给出了两个子菜单,要让它无限扩充的话只要把”ul.menu”所有代码复制到你相加的子菜单的li标签里面的a标签之后

二:核心CSS代码

.menu 		{ width:100px; float:left; border-right:5px solid #000}
.menu1		{ float:left; width:100px;}
#menu li 	{ width:100px;}
.menu a 	{ height:25px; line-height:25px; width:100px;
 border:1px solid #f00; display:block; text-align:center; }

.item li 	{ display:none;}	/*通常情况下隐藏子菜单*/
.item li 	{ position:relative;}
/*设置相对定位,便于子菜单位于父菜单的右侧100px*/

.item li ul { position:absolute; left:100px; top:0;}

三:JQuery代码

$(function (){
	$(".menu li").hover(
       //让.menu下面的列表项li响应鼠标移到到上面的事件
		function (){
			$(this).children().children("li").fadeIn();
			//当前对象的子子元素li淡入
		},
		function (){
			$(this).children().children("li").fadeOut();
			//当前对象的子子元素li淡出
		}
	);
});

最终代码与效果预览

注意:IE6中会出现一点bug,如果你知道解决方法的话可以谈讨一下
感谢 倾心 同学的帮助,菜单在IE6下的响应问题已解决.

JavaScript中的函数(方法)重载

学习JavaScript有几天了,今天看到JS中的面向对象编程。我们知道在一般的面向对象的编程中方法是可以重载的,通俗得说就是可重载方法的调用是根据形参决定的。比如说一个类中有两个方法(不完整):

cal (a,b) 	{ return a+b;};
cal (a,b,c) 	{ return a*b;};

如果调用第二个带三个参数的方法”cal(1,2,3);”,将返回1乘2的值,而不是1加2。

然而在JavaScript中函数是不支持重载的,如果我们必须要用到重载怎么办呢?这时候就得用到arguments对象了,它可以检测到返回的函数参数个数。我们可以调用它的length属性来做判断从而达到防重载的效果。用法如下:

function returnArgs (){ alert(arguments.length); }
returnArgs("小","强");	 //输出2
returnArgs(2009);		//输出1
returnArgs();			//输出0

总结一下写一个小程序,下面的脚本代码一定会输出”3|6″从而模仿实现了JavaScript的函数重载:

<script type="text/javascript">
	function cal (a,b,c){
		if (arguments.length == 2){
			return a+b;
		}
		else if(arguments.length == 3){
			return a*b*c;
		}
	}
	document.write (cal(1,2) + " | ");
	document.write (cal(1,2,3));
</script>