jQuery实现带动画效果的多级下拉菜单
作者:竹影时间:2026-10-30 02:27:25浏览:119
本文介绍基于jQuery实现的多级下拉菜单,具备平滑动画效果。通过ul/li嵌套结构构建层级,利用CSS控制样式,并避免使用toggle()以确保收缩时能正确隐藏子级及后续元素。
jQuery带动画多级下拉菜单实现
本文分享一段使用jQuery编写的带动画效果的多级下拉菜单实现代码,供读者参考。
该多级下拉菜单基于jQuery开发,支持动画过渡效果。其结构采用ul和li标签循环嵌套的方式(ul > li > ul > li...)构建层级关系;若某分类无下级菜单,则直接以li a标签结束嵌套。代码中未使用toggle()方法,旨在确保菜单收缩时,能够同时隐藏该菜单下的所有子级菜单及后续相关元素。
运行效果截图如下:

在线演示地址如下:
http://demo.jb51.net/js/2015/jquery-animate-style-down-show-menu-codes/
具体代码如下:
<!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=utf-8" />
<title>jQuery多级下拉菜单</title>
<script language="javascript" type="text/javascript" src="jquery1.3.2.js"></script>
<style type="text/css">
ul,li{
list-style:none;
font-size:12px;
line-height:20px;
width:80px;
margin:0;
padding-left:6px;
}
.child{
display:none;
}
.nav a{
display:block;
color:#5c84c1;
padding-left:22px;
}
</style>
<script language="javascript" type="text/javascript">
//说明 所有的元素以ul li ul li ul li的循环格式嵌套 如果没有下级分类 就用li a结束嵌套
$(document).ready(function(){
//$(".nav ul li").children("ul").hide();
$(".nav").find("li").not(":has(ul)").children("a").css({textDecoration:"none",color:"#333",background:"none"})
.click(function(){
$(this).get(0).location.href="'"+$(this).attr("href")+"'";
});
$(".nav").find("li:has(ul)").children("a").css({background:"url(images/statu_close.gif) no-repeat left top;"})
.click(function(){
if($(this).next("ul").is(":hidden")){
$(this).next("ul").slideDown("slow");
if($(this).parent("li").siblings("li").children("ul").is(":visible")){
$(this).parent("li").siblings("li").find("ul").slideUp("1000");
$(this).parent("li").siblings("li:has(ul)").children("a").css({background:"url(images/statu_close.gif) no-repeat left top;"})
.end().find("li:has(ul)").children("a").css({background:"url(images/statu_close.gif) no-repeat left top;"});}
$(this).css({background:"url(images/statu_open.gif) no-repeat left top;"});
return false;
}else{
$(this).next("ul").slideUp("normal");
//不用toggle()的原因是为了在收缩菜单的时候同时也将该菜单的下级菜单以后的所有元素都隐藏
$(this).css({background:"url(images/statu_close.gif) no-repeat left top;"});
$(this).next("ul").children("li").find("ul").fadeOut("normal");
$(this).next("ul").find("li:has(ul)").children("a").css({background:"url(images/statu_close.gif) no-repeat left top;"});
return false;
}
});
});
</script>
</head>
<body>
<div class="nav">
<ul>
<li>
<a href="#">一级菜单1</a>
<ul class="child">
<li>
<a href="#">二级菜单1</a>
</li>
<li>
<a href="#">二级菜单1</a>
<ul class="child">
<li>
<a href="#">三级菜单1</a>
</li>
<li>
<a href="#">三级菜单1</a>
</li>
</ul>
</li>
<li>
<a href="#">二级菜单2</a>
<ul class="child">
<li>
<a href="#">三级菜单2</a>
</li>
<li>
<a href="#">三级菜单2</a>
<ul class="child">
<li>
<a href="#">四级菜单</a>
</li>
<li>
<a href="#">四级菜单1</a>
</li>
<li>
<a href="#">四级菜单1</a>
<ul class="child">
<li>
<a href="#">五级菜单1</a>
</li>
<li>
<a href="#">五级菜单1</a>
</li>
<li>
<a href="#">五级菜单1</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">一级菜单2</a>
<ul class="child">
<li>
<a href="#">二级菜单1</a>
</li>
<li>
<a href="#">二级菜单1</a>
</li>
</ul>
</li>
<li>
<a href="#">一级菜单3</a>
<ul class="child">
<li>
<a href="#">二级菜单1</a>
</li>
<li>
<a href="#">二级菜单1</a>
</li>
</ul>
</li>
<li>
<a href="#">一级菜单4</a>
</li>
</ul>
</div>
</body>
</html>
希望本文所述对大家的jquery程序设计有所帮助。
作者最新文章
网页开发三者分工:HTML结构、CSS样式与JavaScript交互怎么协作
2026-11-05 12:51:22
JS解析URL参数时怎么处理中文乱码和特殊字符
2026-11-05 12:47:23
js-cookie 存储 JSON 对象:自动序列化与反序列化技巧
2026-11-05 12:36:26
marked.js 快速上手:安装与基础 Markdown 转 HTML 示例
2026-11-05 09:32:53
Phaser.js 与 PixiJS、Cocos Creator 的技术选型对比
2026-11-05 08:36:30
