JS 下拉菜单

时间:2023-03-09 13:21:04
JS 下拉菜单

HTML

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>下拉菜单</title>
<link rel="stylesheet" href="css/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<div id="nav">
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">学习 +</a>
<ul>
<li><a href="#">JavaScript</a></li>
<li><a href="#">jQuery</a></li>
</ul>
</li>
<li><a href="#">案例 +</a>
<ul>
<li><a href="#">JavaScript ></a>
<ul>
<li><a href="#">下拉菜单</a></li>
<li><a href="#">图片轮播</a></li>
<li><a href="#">拖拽效果</a></li>
</ul>
</li>
<li><a href="#">jQuery ></a>
<ul>
<li><a href="#">下拉菜单</a></li>
<li><a href="#">图片轮播</a></li>
<li><a href="#">拖拽效果</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">关于</a></li>
</ul>
</div>
</body>
</html>

CSS实现三级菜单

 /*静态页面样式*/
* {
margin:;
padding:;
} #nav {
width: 500px;
height: 50px;
margin: 50px auto;
background-color: #ccc;
border-radius: 10px;
} ul li {
list-style: none;
} #nav>ul>li {
float: left;
} ul a {
text-decoration: none;
color: black;
display: block;
text-align: center;
height: 50px;
line-height: 50px;
width: 125px;
background-color: #ccc;
border-radius: 10px;
} ul a:hover {
color: white;
background-color: black;
border-radius: 10px;
} ul ul {
position: absolute;
display: none;
} ul ul ul {
position: absolute;
margin-left: 125px;
margin-top: -50px;
display: none;
} /*CSS显示下拉菜单*/
ul li:hover>ul {
display: block;
}

JS实现三级菜单

 window.onload = showMenu;

 function showMenu() {
var nav = document.getElementById("nav");
var list = nav. getElementsByTagName("li"); for (var i = 0, l = list.length; i < l; i++) {
list[i].onmouseover = function() {
var sub_menu = this.getElementsByTagName("ul")[0];
if(sub_menu) {
sub_menu.style.display = "block";
}
}
list[i].onmouseout = function() {
var sub_menu = this.getElementsByTagName("ul")[0];
if(sub_menu) {
sub_menu.style.display = "none";
}
}
}
}

jQuery实现三级菜单

 $(document).ready(function() {
$("#nav").find("li").mouseover(function() {
$(this).children("ul").show();
});
$("#nav").find("li").mouseout(function() {
$(this).children("ul").hide();
});
})

show()和hide()不能传入参数,传入参数就有bug,原因未知。。。

而且也不支持slide和fade。。。

JS实现动画菜单

 window.onload = showMenu;

 function showMenu() {
var nav = document.getElementById("nav");
var list = nav.getElementsByTagName("li"); for (var i = 0, l = list.length; i < l; i++) {
list[i].onmouseover = function() {
var sub_menu = this.getElementsByTagName("ul")[0];
if(sub_menu) {
sub_menu.style.display = "block";
var addH = function() {
var h = sub_menu.offsetHeight;
h += 5;
if(h >= 100) {
sub_menu.style.height = 100 + "px";
} else {
sub_menu.style.height = h + "px";
}
};
setInterval(addH, 50);
}
} list[i].onmouseout = function() {
var sub_menu = this.getElementsByTagName("ul")[0];
if(sub_menu) {
var subH = function() {
var h = sub_menu.offsetHeight;
h -= 5;
if(h <= 0) {
sub_menu.style.height = 0 + "px";
sub_menu.style.display = "none";
} else {
sub_menu.style.height = h + "px";
}
};
setInterval(subH, 50);
}
}
}
}

可以正常显示菜单,但是无法隐藏菜单。。。

只能显示二级菜单,三级菜单被吃了?!

随着鼠标不停地滑过,显示菜单的速度越来越快。。。

CSS实现动画菜单

 /*静态页面样式*/
* {
margin:;
padding:;
} #nav {
width: 500px;
height: 50px;
margin: 50px auto;
background-color: #ccc;
border-radius: 10px;
box-shadow: 2px 2px 2px rgba(0,0,0,0.8);
} #nav>ul>li>a {
border-radius: 10px;
} #nav ul li {
list-style: none;
} #nav>ul>li {
float: left;
} #nav a {
text-decoration: none;
color: black;
display: block;
height: 50px;
width: 125px;
text-align: center;
line-height: 50px;
background-color: #ccc;
} #nav ul ul {
position: absolute;
/*display: none;*/
opacity:;
margin: 20px 0 0 0;
transition: all 1s ease-in-out;
} #nav ul ul ul {
margin-top: -30px;
margin-left: 160px;
} #nav ul ul a {
border-radius: 10px 10px 0 0;
border-bottom: 1px solid white;
} #nav a:hover {
color: white;
background-color: black;
} #nav>ul>li:hover>ul {
/*display: block;*/
opacity:;
margin: -15px 0 0 0;
} #nav>ul ul>li:hover>ul {
/*display: block;*/
opacity:;
margin-left: 140px;
margin-top: -50px;
} /*CSS画三角形*/
#nav>ul>li>ul>li:first-child:before {
content: "";
display: block;
border-top: 15px solid transparent;
border-right: 15px solid transparent;
border-bottom: 15px solid #ccc;
border-left: 15px solid transparent;
width:;
margin-left: 50px;
} #nav ul ul ul>li:first-child:before {
content: "";
position: absolute;
display: block;
border-top: 15px solid transparent;
border-right: 15px solid #ccc;
border-bottom: 15px solid transparent;
border-left: 15px solid transparent;
width:;
margin-left: -30px;
margin-top: 13px;
}

预先定义的二级菜单和三级菜单的display属性不能设置为none,如果先设置为none然后在鼠标滑过的时候改为block,将完全没有动画效果,原因未知。。。

但是如果display不设置为none,在鼠标滑过菜单(隐形)所在的位置时,也会显示出来,纠结。。。