使用jQuery实现顺滑折叠面板

博客讲述了在使用jQuery UI的折叠面板Accordion时遇到的嵌套使用问题,即最外层折叠面板展开时子内容无法完全显示。作者通过在CSS中设置height: auto!important解决了内容显示问题,但导致动画效果失效。为了解决这一问题,作者决定使用jQuery自行编写折叠面板的动画效果,提供了自定义的顺滑折叠代码。

jQuery UI有折叠面板框架Accordion,但是我在使用这个框架的时候发现嵌套使用时会出现问题:最外层折叠面板从第二个开始展开时子内容无法完全显示,代码的height被置为了0 。我在CSS中将折叠面板的height强制设置为auto,即height: auto!important; 后可以解决完全显示的问题。但是,jQuery UI的折叠动画是基于改变其height值实现收起展开效果的,我强制设置height:auto后这一动画就被废掉了,展开收起的过程十分难看。最后我决定自己用jQuery写一个折叠面板效果,代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="//at.alicdn.com/t/font_1dmht87fc8dm42t9.css" />
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			.wrap{
				width: 200px;
			}
			.accordion{
				padding: 10px;
			}
			.accordion>p{
				background: #ccc;
				color: #333;
				padding: 0 10px;
				line-height: 26px;
				margin-top: 5px;
			}
			.accordion>p.active{
				background: blue;
				color: #fff;
			}
			.accordion>p em{
				margin-right: 10px;
			}
			.accordion>div, .accordion>ul{
				border: 1px solid blue;
				display: none;
			}
			.accordion>ul{
				list-style: none;
			}
			.accordion>ul li{
				padding: 0 10px;
				line-height: 26px;
			}
		</style>
	</head>
	<body>
		<div class="wrap">
			<div class="accordion">
				<p><em class="iconfont icon-add"></em>Head1</p>
				<div class="accordion">
					<p><em class="iconfont icon-add"></em>Sub Head1</p>
					<ul>
						<li>Item1</li>
						<li>Item2</li>
						<li>Item3</li>
						<li>Item4</li>
						<li>Item5</li>
					</ul>
					<p><em class="iconfont icon-add"></em>Sub Head2</p>
					<ul>
						<li>Item1</li>
						<li>Item2</li>
						<li>Item3</li>
						<li>Item4</li>
						<li>Item5</li>
					</ul>
				</div>
				<p><em class="iconfont icon-add"></em>Head2</p>
				<div class="accordion">
					<p><em class="iconfont icon-add"></em>Sub Head1</p>
					<ul>
						<li>Item1</li>
						<li>Item2</li>
						<li>Item3</li>
						<li>Item4</li>
						<li>Item5</li>
					</ul>
					<p><em class="iconfont icon-add"></em>Sub Head2</p>
					<ul>
						<li>Item1</li>
						<li>Item2</li>
						<li>Item3</li>
						<li>Item4</li>
						<li>Item5</li>
					</ul>
				</div>
			</div>
		</div>
		
		<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
		<script type="text/javascript">
			$(".accordion>p").click(function(){
				if($(this).hasClass("active")){
					$(this).find("em").removeClass("icon-jian").addClass("icon-add");
					$(this).removeClass("active").next().slideUp();
				}
				else{
					$(this).find("em").removeClass("icon-add").addClass("icon-jian");
					$(this).addClass("active").next().slideDown();
				}
			});
		</script>
	</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值