用jQuery实现三级下拉菜单
来源:互联网 发布:网络女主播视频六间房 编辑:程序博客网 时间:2024/05/22 01:29
这篇文章是我借鉴别人文章的基础,自己练了一遍并加了一些自己的想法进去,现总结如下:
咱们先看一下设计图:
1,2,3是主菜单,点击1的时候出现1-1,1-2,1-3再次点击 1-2的时候出现1-2-1,1-2-......功能以此类推
这就是功能展示,那么我们如何通过jQuery来实现呢?
思路:
- 先用ul列表来布局,并且刚开始的时候下拉菜单都是隐藏状态的显然有用到一个关键的css属性:display:none;
- 菜单1,2,3点击的时候能变色,而且相应的下拉菜单会显示(一级菜单能点击-能变色-能下拉)
- 以1-1,1-2,1-3这个下拉菜单为例,划过每一个会相应的变色并且当划过每一个菜单的时候会出现例如1-2-1,1-2-2,1-2-3,1-2-4的情况(二级菜单能点击-能变色-能下拉)
- 鼠标划过1-2-1,1-2-2,1-2-3,1-2-4时也会出现相应的变色(三级菜单能变色)
- 以此类推三级菜单能点击-能变色-能下拉,四级能,五级.......
大体功能分析完毕下面展示我所写的代码:
我的css代码:
*,::before,::after { margin: 0; padding: 0;}ul { list-style: none;}a { text-decoration: none; line-height: 100px;}.clearfix::after { content: "."; display: block; height: 0; line-height: 0; visibility: hidden; clear: both;}.tx { text-align: center;}.active { background: black!important;}ul > li.on > ul { display: block;}.menu { width: 300px; height: 100px;}.menu > li { width: 100px; height: 100px; float: left;}.menu > li > a { display: block; width: 100%; height: 100%; background: #ffa500; font-size: 20px; text-align: center;}.menu > li > ul { display: none;}.menu > li > ul > li { width: 100px; height: 100px; float: left; position: relative;}.menu > li > ul > li > a { display: block; width: 100%; height: 100%; background: #ffa500; font-size: 20px; text-align: center;}.menu > li > ul > li > ul { position: absolute; left: 100px; top: 0;}.menu > li > ul > li > ul li { width: 100px; height: 100px; float: left;}.menu > li > ul > li > ul li a { display: block; width: 100%; height: 100%; background: #ffa500; font-size: 20px; color: red; text-align: center;}我的html
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title><link rel="stylesheet" type="text/css" href="css/menu.css"/></head><body><ul class="menu clearfix"><li><a href="javascript:;">1</a><ul><li><a href="javascript:;">1-1</a><ul class="clearfix"><li><a href="javascript:;">1-1-1</a></li><li><a href="javascript:;">1-1-2</a></li><li><a href="javascript:;">1-1-3</a></li></ul></li><li><a href="javascript:;">1-2</a><ul class="clearfix"><li><a href="javascript:;">1-2-1</a></li><li><a href="javascript:;">1-2-2</a></li><li><a href="javascript:;">1-2-3</a></li></ul></li><li><a href="javascript:;">1-3</a><ul class="clearfix"><li><a href="javascript:;">1-3-1</a></li><li><a href="javascript:;">1-3-2</a></li><li><a href="javascript:;">1-3-3</a></li></ul></li></ul></li><!--以下两个不再重复--><li><a href="javascript:;">2</a><ul><li><a href="javascript:;">1-1</a><ul class="clearfix"><li><a href="javascript:;">2-1-1</a></li><li><a href="javascript:;">2-1-2</a></li><li><a href="javascript:;">1-1-3</a></li></ul></li><li><a href="javascript:;">1-2</a><ul class="clearfix"><li><a href="javascript:;">1-2-1</a></li><li><a href="javascript:;">1-2-2</a></li><li><a href="javascript:;">1-2-3</a></li></ul></li><li><a href="javascript:;">1-3</a><ul class="clearfix"><li><a href="javascript:;">1-3-1</a></li><li><a href="javascript:;">1-3-2</a></li><li><a href="javascript:;">1-3-3</a></li></ul></li></ul></li><li><a href="javascript:;">3</a><ul><li><a href="javascript:;">1-1</a><ul class="clearfix"><li><a href="javascript:;">1-1-1</a></li><li><a href="javascript:;">1-1-2</a></li><li><a href="javascript:;">1-1-3</a></li></ul></li><li><a href="javascript:;">1-2</a><ul class="clearfix"><li><a href="javascript:;">1-2-1</a></li><li><a href="javascript:;">1-2-2</a></li><li><a href="javascript:;">1-2-3</a></li></ul></li><li><a href="javascript:;">1-3</a><ul class="clearfix"><li><a href="javascript:;">1-3-1</a></li><li><a href="javascript:;">1-3-2</a></li><li><a href="javascript:;">1-3-3</a></li></ul></li></ul></li></ul></body><script type="text/javascript" src="js/jquery.js"></script><script type="text/javascript" src="js/menu.js"></script></html>
我的js文件
$(document).ready(function(){//当鼠标悬浮的时候给所有的添加背景色$(".menu li a").hover(function(){$(this).addClass("active");//a标签的兄弟元素ul的css样式如果是display:none;就让其的slidedownif($(this).siblings("ul").css("display") == "none"){$(this).siblings("ul").slideDown(300);if($(this).parent("li").siblings("li").children("ul").css("display") == "block"){console.log(1)$(this).parent("li").siblings("li").children("ul").css("display","none");}else{ //控制自身菜单下子菜单隐藏// $(this).siblings('ul').slideUp(200); //控制自身菜单下子菜单隐藏 $(this).siblings('ul').children('li').children('ul').slideUp(200);}}},function(){$(this).removeClass("active");$(this).parent("li").siblings("li").children("ul").css("display","none");})})
以上内容出现了bug而且我跳入其中根本不知道自己错在了哪里,好悲剧
下面网上资源正确的两种写法:
1.简洁的写法
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>jQuery三级下拉列表导航菜单</title> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> <style type="text/css">*{margin: 0; padding: 0;}body{ font-size: 12px; }li{ list-style: none;}ul.nav li{ width: 200px; text-align:center;}ul.nav > li{ float: left; margin-right:10px;}ul.nav li h3{height: 40px; line-height: 40px;}ul.nav > li > h3{ background: #72a7ff;}ul.nav > li > ul > li h3{ background: #ffd9d9;}ul.nav > li h3:hover,.choice{ background: #ffc0c0!important;}ul > li > ul{ display: none;}ul > li.on > ul{ display: block;}ul.nav li{ position: relative;}ul.nav > li > ul > li ul{ position: absolute; top: 0; right: -200px;}ul.nav span.sub{ position: absolute; display: block; right:10px; top: 0; width: 10px; height: 40px; background: url(images/arrows.png) no-repeat center center;}</style> <script type="text/javascript"> $(document).ready(function() { $("ul.nav li").hover(function(){ $(this).addClass("on"); }, function(){ $(this).removeClass("on"); }) }); $(document).ready(function() { $("ul.nav li").hover(function(){ $(this).parent("ul").siblings("h3").addClass("choice"); }, function(){ $(this).parent("ul").siblings("h3").removeClass("choice"); }) }); $(document).ready(function() { if ($("ul.nav li").find("ul") .html()!="") { $("ul.nav li").parent("ul").siblings("h3").append("<span class='sub'></span>"); } });</script> </head><body><ul class="nav"> <li><h3>我的网站</h3> <ul> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3> <ul> <li><h3>4级分类</h3> <ul> <li><h3>5级分类</h3></li> <li><h3>5级分类</h3></li> <li><h3>5级分类</h3></li> <li><h3>5级分类</h3></li> </ul> </li> <li><h3>4级分类</h3></li> <li><h3>4级分类</h3></li> <li><h3>4级分类</h3></li> </ul> </li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> </ul> </li> <li><h3>我的网站</h3> <ul> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> </ul> </li> <li><h3>我的网站</h3> <ul> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> </ul> </li> <li><h3>我的网站</h3> <ul> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> <li><h3>2级分类</h3> <ul> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> <li><h3>3级分类</h3></li> </ul> </li> </ul> </li></ul> </body></html>
2.复杂的写法
<body> <aside> <ul class="one"> <li> <a href="#" class="a">目录A</a> <ul class="two" style="display: none"> <li><a href="#" class="a">二级目录A</a> <ul class="three" style="display: none"> <li><a href="#">三级目录A</a></li> </ul> </li> <li><a href="#" class="a">二级目录B</a></li> <li><a href="#" class="a">二级目录C</a></li> </ul> </li> <li> <a href="#" class="a">目录B</a> <ul class="two" style="display: none"> <li><a href="#" class="a">二级目录A</a> <ul class="three" style="display: none"> <li><a href="#">三级目录A</a></li> </ul> </li> <li><a href="#" class="a">二级目录B</a></li> <li><a href="#" class="a">二级目录C</a></li> </ul> </li> <li> <a href="#" class="a">目录C</a> </li> </ul> </aside> //jQuery部分<script src="js/jquery-1.8.3.min.js"></script><script> $(document).ready(function() { $('.a').click(function() { if ($(this).siblings('ul').css('display') == 'none') { $(this).siblings('ul').slideDown(100).children('li'); if ($(this).parents('li').siblings('li').children('ul').css('display') == 'block') { $(this).parents('li').siblings('li').children('ul').slideUp(100); } } else { //控制自身菜单下子菜单隐藏 $(this).siblings('ul').slideUp(100); //控制自身菜单下子菜单隐藏 $(this).siblings('ul').children('li').children('ul').slideUp(100); } }); });</script></body>
我还要继续研究是怎么错的,脑袋都大了!!!
0 0
- 用jQuery实现三级下拉菜单
- jQuery三级下拉菜单
- 三级级联下拉菜单实现
- 用jquery 实现下拉菜单
- 用jquery 实现下拉菜单
- 分别用css、JS、jQuery实现二级菜单、三级菜单
- 【JQuery】使用JQuery实现城市两级或三级联动(下拉菜单)
- jquery 实现下拉菜单
- JQUERY实现下拉菜单
- 纯CSS实现的三级下拉菜单
- js实现年月日三级下拉菜单联动
- ajax实现三级联动下拉菜单
- js实现年月日三级下拉菜单联动
- CSS实现三级导航下拉菜单
- CSS实现三级下拉菜单分析
- 自动筛选实现三级联动下拉菜单
- 用简单的jQuery实现下拉菜单
- jsp+jquery实现省市区三级联动下拉
- 何时使用 Parallel.ForEach,何时使用 PLINQ
- 软件工程视频总结--1
- 转载一篇关于HTML5 data-* 自定义属性的文章
- Android中的通知
- 栈的压入,弹出序列
- 用jQuery实现三级下拉菜单
- 学习初衷
- Jquery—操作css
- Struts2的工作流程
- loadrunner通过odbc测mysql数据库语句
- Java浅拷贝和深拷贝
- 汇编DEBUG常用指令
- 《深入理解LINUX内核》学习笔记——内存管理
- MFC Windows坐标系统与坐标变换