JS练习---tab页切换

练习:

在导航栏上选择选项,显示框内显示相对应的内容,同时选中选项时,有高亮提示。

目标效果如下:
在这里插入图片描述
代码详解:

首先进行页面布局,有上下两个部分组成,上部为导航栏,下部为显示内容,代码如下:

<div class="box">
			<div class="list">
				<span class="active">话费</span>
				<span>酒店</span>
				<span>机票</span>
			</div>
		
			<div class="content">
				<div class="current">话费内容</div>
				<div class="d2">酒店内容</div>
				<div class="d3">机票内容</div>
			</div>
			
		</div>

其次,设置相对应的基础渲染,这里的渲染也决定了之后的js实现。
本例中是先针对整体进行渲染,然后对第一个进行选中渲染,之后js实现时候,首先去除三个导航栏的渲染,然后针对选中的进行渲染。基础渲染代码如下:

<script type="text/javascript">
		//要求: 点击上面的标签栏,底色发生变化 下面的内容对应改变 并且其它不变
		
		//进行节点选择,用TagName选择,参数需要双引号,返回值是List列表
		var spans = document.getElementsByTagName("span")  
		
		//对每一个标签进行事件绑定
		for (var i = 0; i < spans.length; i++) {    
			//自定义一个下标属性,作为元素索引,便于后期渲染
			spans[i].setAttribute("index",i);   
			spans[i].onclick = function(){    //绑定点击事件
				
				
				var index = this.getAttribute("index")   //获取当前标签的索引值
				//先恢复所有span的默认颜色(底色一致)
				 for (var j = 0; j < spans.length; j++) {
				 	spans[j].className="";    
				 }
				 this.className="active";   //标签栏渲染
				 
				 
				 //显示内容渲染,找到内容下所有的div,这里先是使用query是为了确保后面找到的div是属于content下的div
				 var divs = document.querySelector(".content").getElementsByTagName("div")
				 //先恢复所有的div的默认样式
				 for (var j = 0; j < divs.length; j++) {
				 	divs[j].className="";
				 }
				 //给对应div添加样式
				 divs[index].className="current"
			}	
		}
		
		</script>

仔细阅读注释,一些细节和思路都写在了注释里面

完整代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			body {
				margin: 0;
			}

			.box {
				/* 设置整体容器的大小和位置 */
				width: 300px;
				height: 300px;
				margin: 0 auto;
			}

			.list span {
				/* list下的span选择,进行基础渲染 */
				display: inline-block;
				width: 96px;
				height: 40px;
				line-height: 40px;
				text-align: center;
				background-color: aquamarine;
				cursor: pointer;
			}

			.content div {
				/* 在content下的div选择器,进行基础渲染 */
				height: 260px;
				background-color: aliceblue;
				display: none;
			}

			.content .current {
				/* 这里是选中渲染 */
				display: block;
			}

			.list .active {
				/* 这里是选中渲染 */
				background-color: rosybrown;
			}
		</style>
	</head>


	<body>
		<div class="box">
			<div class="list">
				<span class="active">话费</span>
				<span>酒店</span>
				<span>机票</span>
			</div>

			<div class="content">
				<div class="current">话费内容</div>
				<div class="d2">酒店内容</div>
				<div class="d3">机票内容</div>
			</div>

		</div>


		<script type="text/javascript">
			//要求: 点击上面的标签栏,底色发生变化 下面的内容对应改变 并且其它不变

			//进行节点选择,用TagName选择,参数需要双引号,返回值是List列表
			var spans = document.getElementsByTagName("span")

			//对每一个标签进行事件绑定
			for (var i = 0; i < spans.length; i++) {
				//自定义一个下标属性,作为元素索引,便于后期渲染
				spans[i].setAttribute("index", i);
				spans[i].onclick = function() { //绑定点击事件


					var index = this.getAttribute("index") //获取当前标签的索引值
					//先恢复所有span的默认颜色(底色一致)
					for (var j = 0; j < spans.length; j++) {
						spans[j].className = "";
					}
					this.className = "active"; //标签栏渲染


					//显示内容渲染,找到内容下所有的div,这里先是使用query是为了确保后面找到的div是属于content下的div
					var divs = document.querySelector(".content").getElementsByTagName("div")
					//先恢复所有的div的默认样式
					for (var j = 0; j < divs.length; j++) {
						divs[j].className = "";
					}
					//给对应div添加样式
					divs[index].className = "current"
				}
			}
		</script>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philo`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值