Web前端开发实战5:导航菜单(二)
最后更新于:2022-04-01 10:03:25
### 四.伸缩菜单之垂直方向
制作原理:我们还是在原来的水平导航菜单的基础上加以改变CSS样式实现导航菜单的伸缩变化。最简单的方法还是使用CSS样式的方法实现,制作菜单的方法很多,找到适合自己的即可。
代码:
~~~
<span style="font-size:18px;"><!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>
<style type="text/css">
/*CSS全局设置*/
*{
margin:0;
padding:0;
font-size:18px;
font-family:"微软雅黑";
}
.nav{
height:50px;
margin-top:20px;
margin-left:10px;
}
.nav ul{
list-style:none;
height:50px;
border-bottom:10px solid #FF6600;
padding-left:30px;
}
.nav li{
float:left;
margin-top:10px;
}
.nav li a{
background-color:#EEEEEE;
text-decoration:none;
color:#000000;
display:block;
width:90px;
height:40px;
line-height:40px;
text-align:center;
margin-left:1px;
}
.nav li a:hover,.nav li a.on{
background-color:#FF6600;
color:#FFFFFF;
/*伸缩变换设置高度变化*/
height:60px;
/*和使用负值向反方向移动*/
margin-top:-10px;
line-height:60px;
}
</style>
</head>
<body>
<div id="nav" class="nav">
<ul>
<li><a class="on" href="#">网站首页</a></li>
<li><a href="#">课程大厅</a></li>
<li><a href="#">学习中心</a></li>
<li><a href="#">经典案例</a></li>
<li><a href="#">关于我们</a></li>
</ul>
</div>
</body>
</html>
</span>
~~~
效果展示:
初始化状态或鼠标离开的状态:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-22_56f0b845973b0.jpg)
鼠标放在相应的元素上的状态:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-22_56f0b845a8613.jpg)
### 五.伸缩菜单之水平方向(JavaScript方法)
制作原理:我们还是上述菜单的基础上加以改变CSS样式实现导航菜单的伸缩变化。由于这种伸缩变化相对麻烦我们使用JS或jQuery来实现。
代码:
~~~
<span style="font-size:18px;"><!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>
<style type="text/css">
/*CSS全局设置*/
*{
margin:0;
padding:0;
font-size:18px;
font-family:"微软雅黑";
}
.nav{
height:50px;
margin-top:20px;
margin-left:10px;
}
.nav ul{
list-style:none;
height:50px;
border-bottom:10px solid #FF6600;
padding-left:30px;
}
.nav li{
float:left;
margin-top:10px;
}
.nav li a{
background-color:#EEEEEE;
text-decoration:none;
color:#000000;
display:block;
width:90px;
height:40px;
line-height:40px;
text-align:center;
margin-left:1px;
}
.nav li a:hover,.nav li a.on{
background-color:#FF6600;
color:#FFFFFF;
}
</style>
<script type="text/javascript">
window.onload=function(){
var aLists=document.getElementsByTagName("a");
//遍历每个li元素
for(var i=0;i<aLists.length;i++){
aLists[i].onmouseover=function(){
var that=this;
//清除定时器
clearInterval(this.time);
//设置定时器
that.time=setInterval(function(){
that.style.width=that.offsetWidth+8+"px";
if(that.offsetWidth>=120){
clearInterval(that.time);
}
},30)
}
aLists[i].onmouseout=function(){
clearInterval(this.time);
var that=this;
that.time=setInterval(function(){
that.style.width=that.offsetWidth-8+"px";
if(that.offsetWidth<=90){
that.offsetWidth="90px";
clearInterval(that.time);
}
},30)
}
}
}
</script>
</head>
<body>
<div id="nav" class="nav">
<ul>
<li><a class="on" href="#">网站首页</a></li>
<li><a href="#">课程大厅</a></li>
<li><a href="#">学习中心</a></li>
<li><a href="#">经典案例</a></li>
<li><a href="#">关于我们</a></li>
</ul>
</div>
</body>
</html>
</span>
~~~
效果展示:
初始化状态或鼠标离开的状态:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-22_56f0b845bbb73.jpg)
鼠标放在相应的元素上的状态:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-22_56f0b845cc786.jpg)
### 六.伸缩菜单之水平方向(jQuery方法)
和上面使用JavaScript方法实现的区别是:
~~~
<span style="font-size:18px;"><!--引用百度服务器的jQuery库-->
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<script type="text/javascript">
$(function(){
//使用jQuery库中的hover()方法实现鼠标放上去和离开时触发事件
$("a").hover(
function(){
//使用jQuery库中的animate()方法实现菜单伸缩动画变换
$(this).stop().animate({"width":"120px"},200);
},
function(){
//使用jQuery库中的animate()方法实现菜单伸缩动画变换
$(this).stop().animate({"width":"90px"},200);
}
)
})
</script></span>
~~~
效果还是和上面的一模一样的。