请教jQuery高手,写下拉菜单,怎么控制二级菜单出现与消失
我是用ul无序列表搭建的菜单结构:<divid="Menu"><ul><li><aclass="hide"href="#">Demos</a></li><li><acla...
我是用ul无序列表搭建的菜单结构:
<div id="Menu">
<ul>
<li>
<a class="hide" href="#">Demos</a>
</li>
<li>
<a class="hide" href="#">Menus</a>
<ul>
<li><a class="hide" href="#">Item1</a></li>
<li><a class="hide" href="#">Item2</a></li>
<li><a class="hide" href="#">Item3</a></li>
</ul>
</li>
</ul>
</div>
现在样式写好了,想使用jQuery加上效果
我是这样想的,当鼠标移入一级菜单的a链接时,显示出二级菜单的ul;
当鼠标移出一级菜单的a链接时,隐藏二级菜单的ul
当鼠标从二级菜单的a链接中移出时,隐藏这个二级菜单的ul
我按上面的逻辑使用jQuery加上了事件,但是好奇怪,只要我一离开一级菜单的a链接,二级菜立刻就消失了,不给你移到上面的机会 - -!
如果去掉这个事件,在二级菜单上离开任何一个a链接,ul也会消失。。。
我想问大家在使用jQuery制作下拉菜单的时候,这些有没有通用一些的写法?是怎么写的控制代码,先谢谢了~ 展开
<div id="Menu">
<ul>
<li>
<a class="hide" href="#">Demos</a>
</li>
<li>
<a class="hide" href="#">Menus</a>
<ul>
<li><a class="hide" href="#">Item1</a></li>
<li><a class="hide" href="#">Item2</a></li>
<li><a class="hide" href="#">Item3</a></li>
</ul>
</li>
</ul>
</div>
现在样式写好了,想使用jQuery加上效果
我是这样想的,当鼠标移入一级菜单的a链接时,显示出二级菜单的ul;
当鼠标移出一级菜单的a链接时,隐藏二级菜单的ul
当鼠标从二级菜单的a链接中移出时,隐藏这个二级菜单的ul
我按上面的逻辑使用jQuery加上了事件,但是好奇怪,只要我一离开一级菜单的a链接,二级菜立刻就消失了,不给你移到上面的机会 - -!
如果去掉这个事件,在二级菜单上离开任何一个a链接,ul也会消失。。。
我想问大家在使用jQuery制作下拉菜单的时候,这些有没有通用一些的写法?是怎么写的控制代码,先谢谢了~ 展开
6个回答
展开全部
给你个我写的例子 好好分析一下 原理懂了 万事自然通 如果里面有上面语法不懂的 下载一个pdf jquery api 希望能帮到你
<!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>无标题文档</title>
<script language="javascript" src="jquery-1.4.2.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
/* 菜单初始化 */
$('#menu>ul>li>ul').find('li:has(ul:not(:empty))>a').append("<span class='arrow'>></span>"); // 为有子菜单的菜单项添加'>'符号
$("#menu>ul>li").bind('mouseover',function(){ // 顶级菜单项的鼠标移入操作
$(this).children('ul').slideDown('fast');
}).bind('mouseleave',function(){ // 顶级菜单项的鼠标移出操作
$(this).children('ul').slideUp('fast');
});
$('#menu>ul>li>ul li').bind('mouseover',function(){ // 子菜单的鼠标移入操作
$(this).children('ul').slideDown('fast');
}).bind('mouseleave',function(){ // 子菜单的鼠标移出操作
$(this).children('ul').slideUp('fast');
});
});
</script>
<style>
ul,ol,li{list-style:none;padding:0px;margin:0px;}
#menu *{line-height:30px;}
#menu a{
text-decoration:none;
display:block;
}
#menu ul{
text-align:left;
background:#333;
}
#menu .arrow{ /* 菜单项的右侧小箭头 */
float:right;
padding-right:5px;
}
#menu>ul{height:30px;} /* 即使没有菜单项也能保持顶级菜单栏的高度。 */
/* 一级菜单 */
#menu>ul>li{
float:left;
text-align:center;
display:inline-block;
width:80px;
}
#menu>ul>li>a{color:#fff;}
#menu>ul>li:hover{background:#666;}
/* 下拉的菜单栏 */
#menu>ul>li ul{
display:none;
width:150px;
position:absolute;
background:#c1cd94;
box-shadow:2px 2px 2px #000;
-webkit-box-shadow:2px 2px 2px #000;
-moz-box-shadow:2px 2px 2px #123;
}
/* 下拉菜单的菜单项 */
#menu>ul>li>ul li{padding-left:5px; position:relative;}
#menu>ul>li>ul li>a{color:#000;}
#menu>ul>li>ul li:hover{background:#d3dbb3;}
/* 三级及以下的菜单项的定位 */
#menu>ul>li>ul>li ul{left:150px; top:0px;}
</style>
</head>
<body>
<div id="menu">
<ul>
<li><a href="#">菜单一</a>
<ul>
<li><a href="#">子菜单1</a></li>
<li><a href="#">子菜单2</a>
<ul><li><a href="#">子菜单7</a></li></ul>
</li>
<li><a href="#">子菜单3</a></li>
</ul>
</li>
<li><a href="#">菜单二</a>
<ul>
<li><a href="#">子菜单4</a></li>
<li><a href="#">子菜单5</a></li>
<li><a href="#">子菜单6</a></li>
</ul>
</li>
</ul>
</div>
</body>
</html>
<!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>无标题文档</title>
<script language="javascript" src="jquery-1.4.2.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
/* 菜单初始化 */
$('#menu>ul>li>ul').find('li:has(ul:not(:empty))>a').append("<span class='arrow'>></span>"); // 为有子菜单的菜单项添加'>'符号
$("#menu>ul>li").bind('mouseover',function(){ // 顶级菜单项的鼠标移入操作
$(this).children('ul').slideDown('fast');
}).bind('mouseleave',function(){ // 顶级菜单项的鼠标移出操作
$(this).children('ul').slideUp('fast');
});
$('#menu>ul>li>ul li').bind('mouseover',function(){ // 子菜单的鼠标移入操作
$(this).children('ul').slideDown('fast');
}).bind('mouseleave',function(){ // 子菜单的鼠标移出操作
$(this).children('ul').slideUp('fast');
});
});
</script>
<style>
ul,ol,li{list-style:none;padding:0px;margin:0px;}
#menu *{line-height:30px;}
#menu a{
text-decoration:none;
display:block;
}
#menu ul{
text-align:left;
background:#333;
}
#menu .arrow{ /* 菜单项的右侧小箭头 */
float:right;
padding-right:5px;
}
#menu>ul{height:30px;} /* 即使没有菜单项也能保持顶级菜单栏的高度。 */
/* 一级菜单 */
#menu>ul>li{
float:left;
text-align:center;
display:inline-block;
width:80px;
}
#menu>ul>li>a{color:#fff;}
#menu>ul>li:hover{background:#666;}
/* 下拉的菜单栏 */
#menu>ul>li ul{
display:none;
width:150px;
position:absolute;
background:#c1cd94;
box-shadow:2px 2px 2px #000;
-webkit-box-shadow:2px 2px 2px #000;
-moz-box-shadow:2px 2px 2px #123;
}
/* 下拉菜单的菜单项 */
#menu>ul>li>ul li{padding-left:5px; position:relative;}
#menu>ul>li>ul li>a{color:#000;}
#menu>ul>li>ul li:hover{background:#d3dbb3;}
/* 三级及以下的菜单项的定位 */
#menu>ul>li>ul>li ul{left:150px; top:0px;}
</style>
</head>
<body>
<div id="menu">
<ul>
<li><a href="#">菜单一</a>
<ul>
<li><a href="#">子菜单1</a></li>
<li><a href="#">子菜单2</a>
<ul><li><a href="#">子菜单7</a></li></ul>
</li>
<li><a href="#">子菜单3</a></li>
</ul>
</li>
<li><a href="#">菜单二</a>
<ul>
<li><a href="#">子菜单4</a></li>
<li><a href="#">子菜单5</a></li>
<li><a href="#">子菜单6</a></li>
</ul>
</li>
</ul>
</div>
</body>
</html>
展开全部
$(document).ready(function(){
init();
});
function init(){
$("#Menu>ul>li").hover(
function(){
$(this).children("ul").fadeIn("fast");
},
function(){
$(this).children("ul").fadeOut("fast");
}
);
}
还需要强调的是,二级菜单的距离不要离一级导航有缝隙,否则会点不到二级菜单的。这个就是二级菜单的样式的问题了~
init();
});
function init(){
$("#Menu>ul>li").hover(
function(){
$(this).children("ul").fadeIn("fast");
},
function(){
$(this).children("ul").fadeOut("fast");
}
);
}
还需要强调的是,二级菜单的距离不要离一级导航有缝隙,否则会点不到二级菜单的。这个就是二级菜单的样式的问题了~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
分享一个更酷的jquery手拉菜单换内容的代码,可以参考
http://blog.sina.com.cn/s/blog_6da6fed20100r95c.html,希望对你有用
http://blog.sina.com.cn/s/blog_6da6fed20100r95c.html,希望对你有用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<!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>
<script language="javascript" type="text/javascript" src="jquery.1.4.js"></script>
<script language="javascript" type="text/javascript">
function tab(n){
for (i=0;i<3;i++){
document.getElementById("tab"+i).style.display="none";
}
document.getElementById("tab"+n).style.display="block";
}
</script>
<style type="text/css">
.menu{ list-style:none;}
.menu li{ width:100px; height:30px; border:1px solid #ccc; background:#CCCCCC; line-height:30px; font-size:14px; font-weight:bold; color:#000;}
.tab {}
.tab ul { list-style:none;}
.tab ul li { width:200px; height:20px; background:#FFFF00; line-height:20px; font-size:12px; color:#fff;}
</style>
</head>
<body>
<ul class="menu">
<li onmousemove="tab(0)">主导航1</li>
<div id="tab0"style="display:block;" class="tab">
<ul>
<li>主导航1菜单1</li>
<li>主导航1菜单2</li>
<li>主导航1菜单3</li>
</ul>
</div>
<li onmousemove="tab(1)">主导航2</li>
<div id="tab1" style="display:none;" class="tab">
<ul>
<li>主导航2菜单1</li>
<li>主导航2菜单2</li>
<li>主导航2菜单3</li>
</ul>
</div>
<li onmousemove="tab(2)">主导航3</li>
<div id="tab2" style="display:none;" class="tab">
<ul>
<li>主导航3菜单1</li>
<li>主导航3菜单2</li>
<li>主导航3菜单3</li>
</ul>
</div>
</ul>
</body>
</html>
你可以在此基础上再添加一些样式,效果会更好!
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript" src="jquery.1.4.js"></script>
<script language="javascript" type="text/javascript">
function tab(n){
for (i=0;i<3;i++){
document.getElementById("tab"+i).style.display="none";
}
document.getElementById("tab"+n).style.display="block";
}
</script>
<style type="text/css">
.menu{ list-style:none;}
.menu li{ width:100px; height:30px; border:1px solid #ccc; background:#CCCCCC; line-height:30px; font-size:14px; font-weight:bold; color:#000;}
.tab {}
.tab ul { list-style:none;}
.tab ul li { width:200px; height:20px; background:#FFFF00; line-height:20px; font-size:12px; color:#fff;}
</style>
</head>
<body>
<ul class="menu">
<li onmousemove="tab(0)">主导航1</li>
<div id="tab0"style="display:block;" class="tab">
<ul>
<li>主导航1菜单1</li>
<li>主导航1菜单2</li>
<li>主导航1菜单3</li>
</ul>
</div>
<li onmousemove="tab(1)">主导航2</li>
<div id="tab1" style="display:none;" class="tab">
<ul>
<li>主导航2菜单1</li>
<li>主导航2菜单2</li>
<li>主导航2菜单3</li>
</ul>
</div>
<li onmousemove="tab(2)">主导航3</li>
<div id="tab2" style="display:none;" class="tab">
<ul>
<li>主导航3菜单1</li>
<li>主导航3菜单2</li>
<li>主导航3菜单3</li>
</ul>
</div>
</ul>
</body>
</html>
你可以在此基础上再添加一些样式,效果会更好!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似Jquery有个toggle()函数
很好使
很好使
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询