原声js 轮播图 动态添加低栏+淡入淡出

本文介绍了如何使用原生JavaScript创建一个具备动态添加低栏和淡入淡出效果的轮播图。通过纯JS实现图片切换、底部栏跟随以及平滑过渡效果,为网页增添动态视觉体验。
摘要由CSDN通过智能技术生成

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>轮播图</title>
		<style>
						
			*{
				padding: 0;
				margin: 0;
				list-style: none;
			}
			
			.slider{
				position: absolute;
				left: 50%;
				margin-left: -271px;
				border: 1px solid #000;
			}
			.slider-img>img{
				height: 300px;
				width: 540px;
			}
			
			/*--------------轮播图图片-------------------*/
			
			.slider-block{
				height: 300px;
				width: 540px;
				border: 1px solid #000;
			}
			.slider-img{
				position: absolute;
				opacity: 0;
			}
			.active{
				/*display: block;*/
			}
			
			
			/*---------------图片按钮-------------------*/
			.direction>img{
				height: 44px;
				width: 21px;
				position: absolute;
				top: 50%;
				margin-top: -21px;
				opacity: 0.2;
			}
			.direction>img:nth-child(1){
				left: 30px;
			}
			.direction>img:nth-child(2){
				right: 30px;
			}
			
			
			/*---------------- 底部图片数量标识-----------------*/
			.status-position{
				position: absolute;
				bottom: 6px;
				left: 50%;
				margin-left: -48px;
				padding:0px 6px;
				color: white;
				display: flex;
				position: absolute;
				border-radius: 24px;
				background-color: darkgrey;
			}
			.status-position>span{
				background-color: black;
				text-align: center;
				border-radius: 50%;
				width: 15px;
				height: 15px;
				line-height: 15px;
				font-size: 9px;
				color: white;
				margin: 0 3px;
				flex:1;
				opacity: 0.4;
			}
			.spanActive{
				color: red !important;
				background-color: black !important;
				opacity: 1 !important;
			}

		</style>
	</head>
	<body>
		
		<div class="slider">
		
			<div class="slider-block">
				<div class="slider-img" style="opacity: 1;"><img src="img/zls.jpg" /></div>
				<div class="slider-img"><img src="img/dm.jpg" /></div>
				<div class="slider-img"><img src="img/dt.jpg" /></div>
				<div class="slider-img"><img src="img/hb.jpg" /></div>
				<div class="slider-img"><img src="img/jks.jpg" /></div>
				<div class="slider-img"><img src="img/nq.jpg" /></div>
				<div class="slider-img"><img src="img/nt.jpg" /></div>
				<div class="slider-img"><img src="img/wq.jpg" /></div>
				<div class="slider-img"><img src="img/ys.jpg" /></div>
			</div>
			
			<div class="direction">
				<img src="img/img-left.png"  id="img-left"/>
				<img src="img/img-right.png"   id="img-right" />
			</div>
			
			<span class="status-position"> </span>
			
		</div>
		
		
		
		
		
		<script>
			
			
			var slider = document.getElementsByClassName('slider')[0];// 轮播图盒子
			var imgLeft = document.getElementById('img-left'); 		// 左边按钮
			var imgRight = document.getElementById('img-right');	// 右边按钮
			var directionArr = document.getElementsByClassName('direction')[0].children; //所有左右按钮数组
			var sliderImgArr = document.getElementsByClassName('slider-img'); //获取所有图片
			var statusPosition =  document.getElementsByClassName('status-position')[0];
			
			
			var imgStatus = 0; //图片状态标识 从0开始
			
			
			
			
			//动态创建 轮播图低栏数字状态 有几张图片就有几个标识
			var strSpan = "";
			for( var k=1; k<sliderImgArr.length+1; k++ ){
				if(k==1){
					strSpan+='<span class="spanActive">'+k+'</span>';
				}else{
					strSpan+='<span>'+k+'</span>';
				}
			}
			statusPosition.innerHTML =strSpan;
			//让低栏居中 -(总宽度/2) = span*num+margin*num+左右padding 
			statusPosition.style.marginLeft = "-"+((sliderImgArr.length*15+1*sliderImgArr.length +4)/2)+"px";
			
			
			
			
			
			//给slider 添加移入 移除事件 
			slider.onmouseover = function(){
				imgLeft.style.cssText = "opacity: 1;transition-duration:1s;-webkit-transition-duration: 1s;";		
				imgRight.style.cssText = "opacity: 1;transition-duration:1s;-webkit-transition-duration: 1s;";		
			}
			slider.onmouseleave = function(){
				imgLeft.style.cssText = "opacity: 0.2;transition-duration:1s;-webkit-transition-duration: 1s;";	
				imgRight.style.cssText = "opacity: 0.2;transition-duration:1s;-webkit-transition-duration: 1s;";	
			}
			
			
			//判断有多少图片 添加多少状态标识
			var imgNum = document.getElementsByClassName('slider-block')[0].children.length;
			
			
			//左右按钮添加点击事件
			directionArr[0].onclick = function(){
				if(imgStatus==0){ //点击向左 如果当前图片为第一张 需要跳转最后一张
					imgStatus=sliderImgArr.length-1;
				}else{
					imgStatus--; //修改imgStatus位置状态
				}
				updateImg();
				updateSpan();
			}
			directionArr[1].onclick = function(){
				if( (sliderImgArr.length-1) == imgStatus ){ //点击向右 如果当前图片为最后一张 需要跳转第一张
					imgStatus=0;
				}else{
					imgStatus++; //修改imgStatus位置状态
				}
				updateImg();
				updateSpan();
			}
			//图片切换
			function updateImg(){
				//不显示所有图片
				for( var i=0; i<sliderImgArr.length; i++ ){
					sliderImgArr[i].style.opacity = '0';
				}
				//显示当前图片  sliderImgArr[imgStatus]
				sliderImgArr[imgStatus].style.cssText = "opacity:1;transition-duration:2s";
			}
			//图标切换
			var statusNum = statusPosition.children;
			console.log(statusNum);
			function updateSpan(){
				//不显示所有图片
				for( var i=0; i<sliderImgArr.length; i++ ){
					statusNum[i].classList.remove("spanActive");
					statusNum[i].style.opacity = '0.2';
					statusNum[i].style.cssText = 'opacity:0.2;color:white;';
				}
				console.log(imgStatus);
				//显示当前图片  sliderImgArr[imgStatus]
//				statusNum[imgStatus].className = 'spanActive';
				statusNum[imgStatus].style.cssText = "opacity:1;transition-duration:3s;color:red";
			}
			
			
			
			
			
			
		</script>
		
		
		
	</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值