欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何用js来实现渐变的轮播,而不是滑动轮播

程序员文章站 2022-06-01 15:53:06
...

如何用js来实现渐变的轮播,而不是滑动轮播

        其实要实现渐变轮播的方法有很多,有复杂的,也有简单的。而接下来要讲的渐变轮播的方法是比较简单的一种,主要是通过关键帧来设置透明效果,再用js来实现轮播。
html部分:

<div class="showbox" id="showbox">
	<ul class="imgbox" id="imgbox">
		<li>
			<img src="images/_20181219072339.jpg" alt="" class="show" />
		</li>
		<li>
			<img src="images/timg.jpg" alt="" />
		</li>
		<li>
			<img src="images/d1ae8342552d7bca8631be5b33b2abe8.jpg" alt="" />
		</li>
		<li>
			<img src="images/u=1433407092,2344933932&fm=26&gp=0.jpg" alt="" />
		</li>
		<li>
			<img src="images/1dfd70a13ab419a0b7a06ba96d65bf3c.jpg" alt="" />
		</li>
	</ul>
	<ul class="buttons" id="buttons">
		<li class="on"></li>
		<li></li>
		<li></li>
		<li></li>
		<li></li>
	</ul>
	<div class="prev" id="prev"></div>
	<div class="next" id="next"></div>
</div>

css部分:

*{
		margin: 0;
		padding: 0;
	}
	/* 去掉ul,li标签的默认样式 */
	ul,li{ 
		list-style: none;
	}
	/* 设置好盒子的大小,调整好位置*/
	.showbox{
		width: 600px;
		height:350px;
		border: 10px solid #5CB0ED;
		margin: 20px auto;
		position: relative;
	}
	
	.imgbox img{
		width: 100%;
		height: 100%;
		position: absolute;
       /* opacity 属性设置元素的不透明级别。*/
		opacity:0;
       /* animation-timing-function 规定动画的速度曲线。linear 为匀速*/
/*		animation-timing-function: linear;*/
       /* animation-duration 定义动画完成一个周期所需要的时间,以秒或毫秒计。*/
/*		animation-duration:0.5s;*/
       /* animation-fill-mode 规定动画在播放之前或之后,其动画效果是否可见。
        forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)*/
/*		animation-fill-mode:forwards;*/
		/* 下面这条代码是上面的三条代码的简写,这样会省了很多代码*/
		animation:0.5s linear forwards; 
	}
	.showbox img.show{
		/* animation-name 属性为 @keyframes 动画规定名称。*/
		animation-name: discover;
	}
	.showbox img.unshow{
		animation-name: disapper;
	}
	/* 移动按钮的位置*/
	.showbox .buttons{
		position: absolute;
		bottom: 10px;
		left: 240px; 
	}
	.showbox .buttons li{
		float: left;
		width: 12px;
		height: 12px;
		background:rgba(255,255,255,0.7);
		margin-right: 8px;
		border-radius: 50%;
		cursor: pointer;
	}
	.buttons li.on{
		background: orange;
	}
	/* 用关键帧设置透明效果由0.8到1 */
	@keyframes discover{
		from{
			opacity:0;
		}
		to{
			opacity:1;
		}
	}
	/* 用关键帧设置透明效果由1到0.8 */
	@keyframes disappear{
		from{
			opacity:1;
		}
		to{
			opacity:0;
		}
	}
	.prev,.next{
		width:25px;
		height:35px;
		margin-top: 160px;
		cursor: pointer;
		display: none;
	}
	.prev{
		position: fixed;
		margin-left:8px;
		background:url(images/camera_skins.png);
	}
	.next{
		position: fixed;
		margin-left:36%;
		background:url(images/camera_skins.png) -43px 0px;
	}

js部分:

window.onload = function(){
		//获取变量
		var prev = document.getElementById("prev");
		var next = document.getElementById("next");
		var showbox = document.getElementById("showbox");
		var imgs = imgbox.getElementsByTagName("img");
		var list = buttons.getElementsByTagName("li");
		var timer = null;
		var index = 0;

		// 设置自动播放函数
		timer = setInterval( autoPlay,3000 );

		//鼠标滑过容器停止播放,左右箭头出现
		showbox.onmouseover = function(){
			prev.style.display = "block";
			next.style.display = "block";
			clearInterval(timer);
		}
		// 鼠标离开容器时继续播放下一张,左右箭头消失
		showbox.onmouseout = function(){
			prev.style.display = "none";
			next.style.display = "none";
			timer = setInterval( autoPlay,3000 );
		}
		
		 // 实现自动轮播
		function autoPlay(){
			index++;
			if( index>=list.length ){ 
				index = 0;
			}
			picture(index);
		}
		
		// 设置点击左边箭头时,图片和按钮随着变化
		prev.onclick = function(){
			index--;
			if(index<0){
				index=4;
			}
			picture(index);
		};
		
		// 设置点击右边箭头时,图片和按钮随着变化
		next.onclick = function(){
			index++;
			if(index>4){
				index=0;
			}
			picture(index);
		}
		
		// 遍历所有圆点实现闪过切换至对应的图片,初始化并给每个按钮添加鼠标点击功能
		for( var i =0; i<list.length; i++ ){
			(function(j){//自执行函数,获取i
				list[j].onclick = function(){
					picture(j);
					index = j;
				}
			})(i);/*为什么要在最后加(i)? 这是保留i值的方法,
			通常情况下,因为一些效果我们需要获取到for循环中的i的值,
			但是往往拿到的都是最后一个i的值,所以通过这种方法来获取i值。*/
		}
		
		// 根据按钮显示当前的图片
		function picture(offset){
			for( var i= 0;i<list.length ;i++ ){
				imgs[i].className = "unshow";
				list[i].className="";
			}
			imgs[offset].className = "show";
			list[offset].className = "on";
		}
	};

效果图:
如何用js来实现渐变的轮播,而不是滑动轮播
完整代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>如何用js来实现渐变的轮播,而不是滑动轮播</title>
<style>
	*{
		margin: 0;
		padding: 0;
	}
	/* 去掉ul,li标签的默认样式 */
	ul,li{ 
		list-style: none;
	}
	/* 设置好盒子的大小,调整好位置*/
	.showbox{
		width: 600px;
		height:350px;
		border: 10px solid #5CB0ED;
		margin: 20px auto;
		position: relative;
	}
	
	.imgbox img{
		width: 100%;
		height: 100%;
		position: absolute;
       /* opacity 属性设置元素的不透明级别。*/
		opacity:0;
       /* animation-timing-function 规定动画的速度曲线。linear 为匀速*/
/*		animation-timing-function: linear;*/
       /* animation-duration 定义动画完成一个周期所需要的时间,以秒或毫秒计。*/
/*		animation-duration:0.5s;*/
       /* animation-fill-mode 规定动画在播放之前或之后,其动画效果是否可见。
       // forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)*/
/*		animation-fill-mode:forwards;*/
		/* 下面这条代码是上面的三条代码的简写,这样会省了很多代码*/
		animation:0.5s linear forwards; 
	}
	.showbox img.show{
		/* animation-name 属性为 @keyframes 动画规定名称。*/
		animation-name: discover;
	}
	.showbox img.unshow{
		animation-name: disapper;
	}
	/* 移动按钮的位置*/
	.showbox .buttons{
		position: absolute;
		bottom: 10px;
		left: 240px; 
	}
	.showbox .buttons li{
		float: left;
		width: 12px;
		height: 12px;
		background:rgba(255,255,255,0.7);
		margin-right: 8px;
		border-radius: 50%;
		cursor: pointer;
	}
	.buttons li.on{
		background: orange;
	}
	/* 用关键帧设置透明效果由0.8到1 */
	@keyframes discover{
		from{
			opacity:0;
		}
		to{
			opacity:1;
		}
	}
	/* 用关键帧设置透明效果由1到0.8 */
	@keyframes disappear{
		from{
			opacity:1;
		}
		to{
			opacity:0;
		}
	}
	.prev,.next{
		width:25px;
		height:35px;
		margin-top: 160px;
		cursor: pointer;
		display: none;
	}
	.prev{
		position: fixed;
		margin-left:8px;
		background: #EB5558 url(../images/123.png);
/*		background: #EB5558;*/
	}
	.next{
		position: fixed;
		margin-left:36%;
		background: #EB5558 url(../images/camera_skins.png) -43px 0;
/*		background: #EB5558;*/
	}
</style>
</head>

<body>
	<div class="showbox" id="showbox">
		<ul class="imgbox" id="imgbox">
			<li>
				<img src="images/_20181219072339.jpg" alt="" class="show" />
			</li>
			<li>
				<img src="images/timg.jpg" alt="" />
			</li>
			<li>
				<img src="images/1dfd70a13ab419a0b7a06ba96d65bf3c.jpg" alt="" />
			</li>
			<li>
				<img src="images/u=1433407092,2344933932&fm=26&gp=0.jpg" alt="" />
			</li>
			<li>
				<img src="images/d1ae8342552d7bca8631be5b33b2abe8.jpg" alt="" />
			</li>
		</ul>
		<ul class="buttons" id="buttons">
			<li class="on"></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
		<div class="prev" id="prev"></div>
		<div class="next" id="next"></div>
	</div>
	<script>
		window.onload = function(){
			//获取变量
			var prev = document.getElementById("prev");
			var next = document.getElementById("next");
			var showbox = document.getElementById("showbox");
			var imgs = imgbox.getElementsByTagName("img");
			var list = buttons.getElementsByTagName("li");
			var timer = null;
			var index = 0;

			// 设置自动播放函数
			timer = setInterval( autoPlay,3000 );

			//鼠标滑过容器停止播放,左右箭头出现
			showbox.onmouseover = function(){
				prev.style.display = "block";
				next.style.display = "block";
				clearInterval(timer);
			}
			// 鼠标离开容器时继续播放下一张,左右箭头消失
			showbox.onmouseout = function(){
				prev.style.display = "none";
				next.style.display = "none";
				timer = setInterval( autoPlay,3000 );
			}
			
			 // 实现自动轮播
			function autoPlay(){
				index++;
				if( index>=list.length ){ 
					index = 0;
				}
				picture(index);
			}
			
			// 设置点击左边箭头时,图片和按钮随着变化
			prev.onclick = function(){
				index--;
				if(index<0){
					index=4;
				}
				picture(index);
			};
			
			// 设置点击右边箭头时,图片和按钮随着变化
			next.onclick = function(){
				index++;
				if(index>4){
					index=0;
				}
				picture(index);
			}
			
			// 遍历所有圆点实现闪过切换至对应的图片,初始化并给每个按钮添加鼠标点击功能
			for( var i =0; i<list.length; i++ ){
				(function(j){//自执行函数,获取i
					list[j].onclick = function(){
						picture(j);
						index = j;
					}
				})(i);//为什么要在最后加(i)? 这是保留i值的方法,
				//通常情况下,因为一些效果我们需要获取到for循环中的i的值,
				//但是往往拿到的都是最后一个i的值,所以通过这种方法来获取i值。
			}
			
			// 根据按钮显示当前的图片
			function picture(offset){
				for( var i= 0;i<list.length ;i++ ){
					imgs[i].className = "unshow";
					list[i].className="";
				}
				imgs[offset].className = "show";
				list[offset].className = "on";
			}
		};
	</script>
</body>
</html>