js渐变轮播图的实现方法

js渐变轮播图的实现方法

渐变切换主要运用css的opacity属性,结合transition实现渐变过渡。
html结构方面大体分为三部分:
①图片展示部分(主体)
②左右切换部分
③轮播焦点部分

	<div class="banner">
		<div class="ban-image">
			<img class="on" src="img/1.jpg" />
			<img src="img/2.jpg" />
			<img src="img/3.jpg" />
			<img src="img/4.jpg" />
			<img src="img/5.jpg" />
			<img src="img/6.jpg" />
			<img src="img/7.jpg" />
			<img src="img/8.jpg" />
			<img src="img/9.jpg" />
			<img src="img/10.jpg" />
		</div>
		<div class="btn">
			<div class="btn-left"><</div>
			<div class="btn-right">></div>
		</div>
		<div class="tab">
			<ul>
				<li class="on"></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</div>
	</div>

如果想要让轮播图的图片禁止拖动,可以在或里加上οndragstart=“return false”,如<html ondragstart="return false">
css样式方面,主要思想是用绝对定位把所有图片叠起来,opacity预设为0,通过改变opacity为1来显示当前图片。轮播焦点的滚动也采用上述方法。

body{
		user-select: none; /* 禁止用户选中元素 */
		-webkit-user-select: none;
	}

给最外层盒子添加相对定位

.banner{
		position: relative;
		width: 350px;
		height: 500px;
		margin: 50px auto;
	}

定位html①②③部分的位置:

	 /* 第①部分 */
	.ban-image{
			position: absolute;
			width: 100%;
			height: 100%;
		}
	 /* 第②部分 */
	.btn-left, .btn-right{
			position: absolute;
			top: 50%;
			width: 50px;
			height: 60px;
			margin-top: -30px;
			background-color: rgba(0,0,0,0.6);
			font-size: 24px;
			text-align: center;
			line-height: 60px;
			color: #fff;
			cursor: pointer;
		}
	.btn-left{
			left: -50px;
			border-radius: 50% 0 0 50%;
		}
	.btn-right{
			right: -50px;
			border-radius: 0 50% 50% 0;
		}
	 /* 第③部分 */
	.tab{
			position: absolute;
			width: 61%;
			bottom: -20px;
			left: 50%;
			transform: translateX(-50%);
		}

剩下css的是外观样式,你们按着自己喜欢的来,在这里就不赘述了

接下来讲讲最重要的js部分。

其主要思想也很简单,但是估计一些刚入门的小伙伴会直接操作dom改变元素的opacity值。而本文讲的是另一种更好的方法,就是事先写一个不存在的class名,给这个class写上让图片显示的样式。最后只要在js里挨个给图片添加这个class名就能实现轮播了。大体步骤如下:
①首先获取dom里面需要操作的元素。

	var oBtnLeft = document.querySelector('.btn-left');
	var oBtnRight = document.querySelector('.btn-right');
	var aImgs = document.querySelectorAll('.ban-image img');
	var aLi = document.querySelectorAll('.tab li');

②给左右切换键添加点击事件。(以向右移动为例)

 /* 预先写js需要添加的class以及其样式,第一个控制图片,第二个控制轮播焦点 */
 .ban-image img.on{
		opacity: 1;
	}
.tab li.on{
		background-color: #f70;
	}
	// 向右移动
	var index = 0;   // 初始化数组下标,让轮播每次刷新从第一张开始播放
	oBtnLeft.onclick = function() {
		aImgs[index].className = '';  //每次切换让上一张图片变回完全透明,也就是让其class名再次为空
		aLi[index].className = '';
		index++;
		if(index > 9){    //当图片播到最后一张,回到起点
			index = 0;
		}
		aImgs[index].className = 'on';
		aLi[index].className = 'on';
	}

在这里补充一下另一个判断方法,用求模的方法判断,同样能达到一样的判断效果(当index超过 9 时index变回零)

if(index > 9){
			index = 0;
		}
index %= 10; (与上三行代码效果一样)
//		1/10 = 0 余 1;
//		2/10 = 0 余 2;
//		3/10 = 0 余 3;
//		.....
//		9/10 = 0 余 9;
//		10/10 = 1 余 0;  

向左移动的代码也差不多,只是index自加改为自减,判断条件改为if(index < 0){ index = 9; }

那么如何实现焦点切换图片呢?

我们可以写一个循环,让每个焦点都产生点击事件

for(var i=0;i<=9;i++){
				aLi[i].num = i;   // 给每一项li对象添加一个自定义属性,用于存放数组下标
				aLi[i].onclick = function(){
					
				}
			}

每次点击焦点先遍历焦点擦除焦点颜色(当前播放图片所表示的焦点颜色)

for(var i=0;i<=9;i++){
				aLi[i].num = i;
				aLi[i].onclick = function(){
					for(var j=0;j<=9;j++){
						aLi[j].className = '';
						aImgs[j].className = '';
					}
				}
			}

然后让给当前的图片和焦点添加class名“on”

for(var i=0;i<=9;i++){
				aLi[i].num = i;
				aLi[i].onclick = function(){
					for(var j=0;j<=9;j++){
						aLi[j].className = '';
						aImgs[j].className = '';
					}
					this.className = 'on';
					aImgs[this.num].className = 'on';
					index = this.num;  //让下一张播放的图片为焦点选择的图片的下一张,
					// 没有这一句那么每次点击下一张播放会从第一张开始
				}
			}

如何实现轮播图自动轮播

这个更简单了,只需给一个定时器(setInterval)就行,定时器里的函数就用向右移动的函数,如每 3 秒换下一张图片,那么写法如下:

function() {
				// console.log(aImgs);
				aImgs[index].className = '';
				aLi[index].className = '';
				index++;
				if(index > 9){
					index = 0;
				}
				aImgs[index].className = 'on';
				aLi[index].className = 'on';
			}

完毕!效果如下
在这里插入图片描述

发布了20 篇原创文章 · 获赞 6 · 访问量 4047

猜你喜欢

转载自blog.csdn.net/CanMoHaiYan/article/details/89673882