利用jquery控制display属性变化

我想实现的效果是,点击一个区域,另一个区域出现或者消失,我的布局如下:

    <div class="header">
    	<div class="logo">
            <img src="img/logo.jpg" alt="" height="80" />
        </div>
        <a class="nav">
        	控制display属性管理
            <span></span>
        </a>
    </div>
    <div class="subNav clear">
        <ul>
            <li><a href="#">控制块1</a></li>
            <li><a href="#">控制块2</a></li>
            <li><a href="#">控制块3</a></li>
            <li><a href="#">控制块4</a></li>
            <li><a href="#">控制块5</a></li>
        </ul>
    </div>

效果如图所示:


以上的“控制display属性管理”后的三角形是用CSS制作出来的,代码如下:

		width:0;
		height:0;
		overflow:hidden;
		border-left:6px solid transparent;
		border-right:6px solid transparent;
		border-top:6px solid #118a11;

下面罗列下各种朝向的三角形绘制方法:

		width:0;
		height:0;
		overflow:hidden;
		/*朝上的三角形*/
		border-left:6px solid transparent;
		border-right:6px solid transparent;
		border-bottom:6px solid #118a11;
		/*朝下的三角形*/
		border-left:6px solid transparent;
		border-right:6px solid transparent;
		border-top:6px solid #118a11;
		/*朝左的三角形*/
		border-right:6px solid #118a11;
		border-top:6px solid transparent;
		border-bottom:6px solid transparent;
		/*朝右的三角形*/
		border-left:6px solid #118a11;
		border-top:6px solid transparent;
		border-bottom:6px solid transparent;
想用jquery实现的效果是点击“控制display属性管理”后下方导航栏出现或隐藏:

<script type="text/javascript">
	$(function(){
		$(".nav").click(function(){
			var show = $('.subNav').css('display');
			if ( show == 'block')
			{
				$('.subNav').css('display','none');
			}
			if ( show == 'none')
			{
				$('.subNav').css('display','block');
			}
		});
});
</script>
通过nav的点击来触发事件,通过$('.subNav').css('display');来获取subNav的display属性值,并根据属性值,给subNav添加新的属性值,从而达到隐藏出现的效果。

那么通过jquery来控制display属性已做完,后来又尝试了另一种效果,就是当点击导航栏中的a标签时,改变header中的值,代码如下:

$(".subNav a").click(function(){
			var content = $(this).text();
			var triangle = '<span></span>';
			$('.nav').html(content + triangle );
			$('.subNav').css('display','none');
        });

查找subNav下a标签是否有触发点击效果,若有则获取当前点击效果的text值,并将这个值赋给nav的text值,并将subNav收起,但发现这样做会使三角形消失,所以选择将值给nav的html值,并将三角形的代码同时赋给它,这样就可以实现,header中的值可以根据a标签不同的点击从而改变字的效果。

完成了以上这些之后,我又在想能否用transition来增添动态效果,就有了以下代码

	.subNav {
		width:100%;
		height:60px;
		background:#c9d82e;
		transition:1s;
	}

			/*控制高度*/
			var show = $('.subNav').height();
			if ( show == '60')
			{
				$('.subNav ul').css('display','none');
				$('.subNav').css('height','0'); 
			}
			if ( show == '0')
			{
				$('.subNav').css('height','60px'); 
				$('.subNav ul').css('display','block');
			}
这样利用控制subNav的高度从0到60的变化,来用transition达到效果,但很纠结的是外层的div有动态的收起效果,但是字体却不跟随变化,所以就用了隐藏ul的方法,效果有点差,但将就下,有空在研究是哪里出的问题。

当然在使用jquery时,别忘了引入<script src="js/jquery-1.4.3.min.js" type="text/javascript"></script>

总体代码如下所示:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script src="js/jquery-1.4.3.min.js" type="text/javascript"></script>
<style type="text/css">
	/*reset*/
	body,ul { padding:0; margin:0; }
	li { list-style:none; }

	.header {
		position:relative;
		width:100%;
		height:90px;
		padding-top:10px;
		background:#f4f9bf;
	}
	.header .logo {
		float:left;
		width:80px;
		height:80px;
		margin-left:100px;
		border-radius:50px;
		overflow:hidden;
	}
	.header .nav {
		position:relative;
		display:block;
		float:left;
		height:80px;
		width:200px;
		margin-left:50px;
		line-height:80px;
		font-size:16px;
		color:green;
		cursor:pointer;
	}
	.nav span {
		display:block;
		position:absolute;
		top:45%;
		right:0;
		width:0;
		height:0;
		overflow:hidden;
		/*朝下的三角形*/
		border-left:6px solid transparent;
		border-right:6px solid transparent;
		border-top:6px solid #118a11;
	}
	.subNav {
		width:100%;
		height:60px;
		background:#c9d82e;
		transition:1s;
	}
	.subNav ul {
		width:1000px;
		height:60px;
		margin:0 auto;
	}
	.subNav ul li {
		float:left;
		margin:10px 20px;
	}
	
	.subNav a {
		display:block;
		padding:0 50px;
		height:40px;
		line-height:40px;
		font-size:16px;
		color:#057505;
		text-decoration:none;
	}
	.subNav a:hover {
		background:#f4f9bf;
		border-radius:10px;
	}

	.clear { zoom:1; }
	.clear:after { content:''; display:block; clear:both; }

</style>
<script type="text/javascript">
	$(function(){
		$(".nav").click(function(){
			/*控制display属性*/
/*			var show = $('.subNav').css('display');
			if ( show == 'block')
			{
				$('.subNav').css('display','none');
			}
			if ( show == 'none')
			{
				$('.subNav').css('display','block');
			}
*/		
			/*控制高度*/
			var show = $('.subNav').height();
			if ( show == '60')
			{
				$('.subNav ul').css('display','none');
				$('.subNav').css('height','0'); 
			}
			if ( show == '0')
			{
				$('.subNav').css('height','60px'); 
				$('.subNav ul').css('display','block');
			}
		});
	
		$(".subNav a").click(function(){
			var content = $(this).text();
			var active = $('.nav').text();
			var triangle = '<span></span>';
			$('.nav').html(content + triangle );
			$('.subNav').css('display','none');
        });

});
</script>
</head>
<body>
    <div class="header">
    	<div class="logo">
            <img src="img/logo.jpg" alt="" height="80" />
        </div>
        <a class="nav">
        	控制display属性管理
            <span></span>
        </a>
    </div>
    <div class="subNav clear">
        <ul>
            <li><a href="#">控制块1</a></li>
            <li><a href="#">控制块2</a></li>
            <li><a href="#">控制块3</a></li>
            <li><a href="#">控制块4</a></li>
            <li><a href="#">控制块5</a></li>
        </ul>
    </div>
</body>
</html>



  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值