[jQuery基础] jQuery动效案例(三) -- 下拉菜单、折叠菜单

下拉菜单

实现效果展示

在这里插入图片描述

实现步骤
第一步(实现静态效果)
  • CSS部分
*{
margin: 0;
padding: 0;
}
.nav{
list-style: none;
width: 300px;
height: 50px;
background: red;
margin: 100px auto;
cursor: pointer;
}
.nav>li{
width: 100px;
height: 50px;
line-height: 50px;
text-align: center;
float: left;
}
.sub{
list-style: none;
background: mediumpurple;
display: none;
}
  • html部分
<ul class="nav">
	<li>一级菜单
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
</ul>
第二步(动态实现)

在jQuery中如果需要执行动画, 建议在执行动画之前先调用stop方法,然后再执行动画

  • 监听一级菜单的移入事件
    • 拿到二级菜单
      • 停止当前正在运行的动画
    • 让二级菜单展开
$(".nav>li").mouseenter(function () {
	// 1.1拿到二级菜单
	var $sub = $(this).children(".sub")
	// 停止当前正在运行的动画
	$sub.stop()
	// 1.2让二级菜单展开
	$sub.slideDown(1000)
})
  • 监听一级菜单的移出事件
    • 拿到二级菜单
      • 停止当前正在运行的动画
    • 让二级菜单收起
$(".nav>li").mouseleave(function () {
	// 2.1拿到二级菜单
	var $sub = $(this).children(".sub")
	// 停止当前正在运行的动画
	$sub.stop()
	// 2.2让二级菜单收起
	$sub.slideUp(1000)
})

 
 
 
 
 

折叠菜单

实现效果展示

在这里插入图片描述

实现步骤
第一步(实现静态效果)
  • CSS部分
*{
	margin: 0;
	padding: 0;
}
.nav{
	list-style: none;
	width: 300px;
	margin: 100px auto;
	cursor: pointer;
	/*border: 1px solid #000;*/
}
.nav>li{
	border: 1px solid #000;
	line-height: 35px;
	border-bottom: none;
	text-indent: 2em;
	position: relative;
}
.nav>li:last-child{
	border-bottom: 1px solid #000;
	border-bottom-right-radius: 10px;
	border-bottom-left-radius: 10px;
}
.nav>li:first-child{
	border-top-right-radius: 10px;
	border-top-left-radius: 10px;
}
.nav>li>span{
	background: url("https://s1.ax1x.com/2020/06/18/NZzlhF.png") no-repeat center center;
	display: inline-block;
	width: 32px;
	height: 32px;
	position: absolute;
	right: 10px;
	top: 5px;
}
.sub{
	display: none;
}
.sub>li{
	list-style: none;
	background: yellow;
	border-bottom: 1px solid white;
}
.sub>li:hover{
	background: red;
}
.nav>.current>span{
	transform: rotate(90deg);
}
  • html部分
<ul class="nav">
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
	<li>一级菜单<span></span>
		<ul class="sub">
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
			<li>二级菜单</li>
		</ul>
	</li>
</ul>
第二步(动态实现)
  • 拿到二级菜单
  • 让二级菜单展开
  • 拿到所有非当前的二级菜单
  • 让所有非当前的二级菜单收起
  • 让被点击的一级菜单箭头旋转
  • 让所有非被点击的一级菜单箭头还原
$(function () {
	// 1.监听一级菜单的点击事件
	$(".nav>li").click(function () {
		// 1.1拿到二级菜单
		var $sub = $(this).children(".sub")
		// 1.2让二级菜单展开
		$sub.slideDown(1000)
		// 1.3拿到所有非当前的二级菜单
		var otherSub = $(this).siblings().children(".sub")
		// 1.4让所有非当前的二级菜单收起
		otherSub.slideUp(1000)
		// 1.5让被点击的一级菜单箭头旋转
		$(this).addClass("current")
		// 1.6让所有非被点击的一级菜单箭头还原
		$(this).siblings().removeClass("current")
	})
})
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值