JS实战003:选项卡切换图片

版权声明:以上内容为本人原创,如需转载,请注明出处,谢谢! https://blog.csdn.net/kevinfan2011/article/details/86699146

         有了前面制作滑动轮播图的经验,再来做个选项卡切换的非常容易了,跟我们在轮播图下面新增点选功能基本是一样的,当我把鼠标放到那个选项上就切换到哪张图,同时选项卡的背景色跟随鼠标移动而变化,下面是效果图。

         同样的我们第一步先写出HTML基本代码,这里我们有四个选项和四张图,鼠标放到哪个选项上下面就显示对应的图出来,默认给第一个选项选中效果和第一张图显示效果,所以分别加了active和show属性。

<div id="tab">
	<ul class="list">
		<li class="nav active">图片一</li>
		<li class="nav">图片二</li>
		<li class="nav">图片三</li>
		<li class="nav">图片四</li>
	</ul>
	<ul class="content">
		<li class="picture">
			<img class="show" src="../src/assets/images/1.png" alt="">
		</li>
		<li class="picture">
			<img src="../src/assets/images/2.png" alt="">
		</li>
		<li class="picture">
			<img src="../src/assets/images/3.png" alt="">
		</li>
		<li class="picture">
			<img src="../src/assets/images/4.png" alt="">
		</li>
	</ul>
</div>

第二步,布局显示,最外面的div是用来定义图片显示区域的,而ul而分别指向了选项列表和图片列表,为了让图片显示在同一位置,这里我们还是用到了绝对定位,并默认隐藏了其他几张。

<style type="text/css">
		*{
			margin:0px;
			padding:0px;
			box-sizing: border-box;
		}
		li{
			list-style: none;
		}
		#tab{
			position: relative;
			width: 600px;
			height: 400px;
			margin:50px auto;
			border: 10px solid rgba(10, 10, 10,0.5);
		}
		.nav{
			float: left;
			width: 25%;
			height: 50px;
			background-color: #eee;
			text-align: center;
			line-height: 50px;
		}
		.active{
			background-color: rgba(15,151,241,0.6);
		}
		.content{
			position: absolute;
			width:580px;
			top:50px;
			height: 330px;
		}
		.content .picture img{
			position: absolute;
			display: none;
			width: 580px;
			height: 330px;
		}
		.content .picture .show{
			display: block;
		}

        这里需要注意的是我设置了box-sizing: border-box;属性,所以在计算容器宽高时要把边距所以我们也计算在内,不然会出错,这种方式比较适合百分比的时候用,这时页面载入的时候看到如下的效果: 

第三步就是交互效果了,用JavaScript获取我们需要进行交互的元素,然后遍历我们的nav列表,当我们将鼠标放置到对应的选项时将其他几个选项的active样式去除,而picture则将其他几个的show样式去除,只留本身的样式。

<script>
	var navs=document.getElementsByClassName("nav");
	var	pics=document.getElementsByClassName("picture");
	index=0; 
	for(var i=0;i<navs.length;i++){
		(function(i){
			navs[i].onmouseover=function(){
				navs[index].classList.remove("active");
				pics[index].children[0].classList.remove("show");
				index=i;
				navs[index].classList.add("active");
				pics[index].children[0].classList.add("show");
			}
		})(i);
	}
</script>

       这样我们就得到了上图的效果了,这个思路不止可以用在图片切换上,content中可以放入任何你想要显示的内容,下面是完整代码,有兴趣的可以试试:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>选项卡</title>
	<style type="text/css">
		*{
			margin:0px;
			padding:0px;
			box-sizing: border-box;
		}
		li{
			list-style: none;
		}
		#tab{
			position: relative;
			width: 600px;
			height: 400px;
			margin:50px auto;
			border: 10px solid rgba(10, 10, 10,0.5);
		}
		.nav{
			float: left;
			width: 25%;
			height: 50px;
			background-color: #eee;
			text-align: center;
			line-height: 50px;
		}
		.active{
			background-color: rgba(15,151,241,0.6);
		}
		.content{
			position: absolute;
			width:580px;
			top:50px;
			height: 330px;
		}
		.content .picture img{
			position: absolute;
			display: none;
			width: 580px;
			height: 330px;
		}
		.content .picture .show{
			display: block;
		}
	</style>
</head>
<body>	
	<div id="tab">
		<ul class="list">
			<li class="nav active">图片一</li>
			<li class="nav">图片二</li>
			<li class="nav">图片三</li>
			<li class="nav">图片四</li>
		</ul>
		<ul class="content">
			<li class="picture">
				<img class="show" src="../src/assets/images/1.png" alt="">
			</li>
			<li class="picture">
				<img src="../src/assets/images/2.png" alt="">
			</li>
			<li class="picture">
				<img src="../src/assets/images/3.png" alt="">
			</li>
			<li class="picture">
				<img src="../src/assets/images/4.png" alt="">
			</li>
		</ul>
	</div>
</body>
<script>
	var navs=document.getElementsByClassName("nav");
	var	pics=document.getElementsByClassName("picture");
	index=0; 
	for(var i=0;i<navs.length;i++){
		(function(i){
			navs[i].onmouseover=function(){
				navs[index].classList.remove("active");
				pics[index].children[0].classList.remove("show");
				index=i;
				navs[index].classList.add("active");
				pics[index].children[0].classList.add("show");
			}
		})(i);
	}
</script>
</html>

猜你喜欢

转载自blog.csdn.net/kevinfan2011/article/details/86699146