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下的响应问题已解决.

JQuery制作二级滑动菜单

最近在做这个东西的时候遇到了一点问题最后解决了现在发上来给大家看看.问题是这样的:
在JavaScript中mouseover事件有个bug.看下图:
JQuery-menu

子菜单”sub-menu”本来是不显示的,在JavaScript中调用”menu”div的mouseover方法时”sub-menu”会显示出来,但当调用”menu”div的mouseout方法让它隐藏时鼠标的响应范围只是menu区域,这时当我们将鼠标移动到sub-menu区域时菜单会收缩回去这是我们不想看见的效果.
解决办法:
很简单-引入JQuery后,它有一个专门模拟a标签hover的方法”hover()”

hover(over,out)
一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态。
当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。而且,会伴随着对鼠标是否仍然处在特定元素中的检测(例如,处在div中的图像),如果是,则会继续保持“悬停”状态,而不触发移出事件(修正了使用mouseout事件的一个常见错误)。

查看最终效果

JQuery实现收缩列表

L同学近几天疯狂的下itcast的教程,无意中被影响到了。呵呵!看到了一点关于Ajax的东东,貌似很实用。作为Ajax比较流行的框架JQuery因它的小巧实用强大而著称。看到其中的一种效果就放上来给大家分享一下,唯一的体会就是我经常和同学讲的一句话–”不知道的以为很神密,知道的就那回事”.

Jqueryul.png

思路和方法都有很简单:

1.引入JQuery的包。

2.分别在两个标签上响应一个onmouseover事件(当然也可以是onclick)。

3.让Jquery找到要隐藏或者是显示的div节点。

点这里浏览效果