轮播图 4.0

一、前情回顾

上一篇博客 轮播图 — 不屈白银版 已经实现了点击切换图片、显示指示器和自动轮播的功能,轮播图大体的特征都具备了,但是,这里的定时器存在一个问题,设置的一秒钟切换一张图片,如果中途点击指定图片的话,会在很快切换到下一张,不是重新计时,这样的体验效果并不好。针对这一问题,我们对其进行改进。话不多说,赶紧上车。

二、具体实现

1、HTML 代码:实现自动轮播功能不需要改动 HTML 代码,所以这里与上一版本的代码没有区别。

<div class="wrap">
	<ul class="list">
		<li class="item active" style="background-color: red;"></li>
		<li class="item" style="background-color: orange;"></li>
		<li class="item" style="background-color: yellow;"></li>
		<li class="item" style="background-color: green;"></li>
	</ul>
	<ul class="pointlist">
		<li class="point active" data-index='0'></li>
		<li class="point" data-index='1'></li>
		<li class="point" data-index='2'></li>
		<li class="point" data-index='3'></li>
	</ul>
	<button class="btn" id="goPre"><</button>
	<button class="btn" id="goNext">></button>
</div>

2、CSS 代码:实现自动轮播功能不需要改动 CSS 代码,所以这里与上一版本的代码没有区别。

<style type="text/css">
	*{margin: 0;padding: 0;}
	.wrap{width: 650px;height: 240px;position: relative;}
	.list{list-style: none;position: relative;}
	.item{width: 650px;height: 240px;position: absolute;opacity: 0;-webkit-transition: all 2s;}
	.btn{width: 30px;height: 40px;position: absolute;top: 100px;z-index: 3;}
	#goPre{left: 0;}
	#goNext{right: 0;}
	.item.active{z-index: 2;opacity: 1;}
	.pointlist{list-style: none;position: absolute;right: 20px;bottom: 20px;z-index: 3;}
	.point{width: 10px;height: 10px;background-color: rgba(0,0,0,0.4);border-radius: 100%;
			float: left;margin-left: 10px;cursor: pointer;}
	.point.active{background-color: white;}
</style>

3、JavaScript 代码:在上一版本的基础上,添加了 time 变量,用来标志定时器图片跳转参数。

<script type="text/javascript">
	window.onload = function(){
		var items = document.getElementsByClassName('item');
		var points = document.getElementsByClassName('point');//点
		var goPreBtn = document.getElementById('goPre');
		var goNextBtn = document.getElementById('goNext');
		
		var index = 0;//index 表示第几张图片在展示,表示第几张图片有active类名
		              //同时也表示第几个指示器在高亮 - 第几个指示器有active类名
		
		function clearActive(){    //展示下一张之前先将所有图片和指示器的active类名取消掉
			for (var i=0;i<items.length;i++) {
				items[i].classList.remove("active");
				points[i].classList.remove("active");
			}
		}
		
		function goIndex(){    //将要展示的图片和指示器添加上active类名
			clearActive();    //调用上面的clearActive()方法,取消所有图片和指示器的active类名
			items[index].classList.add("active");
			points[index].classList.add("active");
		}
		
		function goNext(){    //定义切换到下一张的函数
			if(index < 3)
				index ++;
			else
				index = 0;
			goIndex();
			time = 0;	//切换图片后令 time = 0
		}
		
		function goPre(){    //定义切换到上一张的函数
			if(index == 0)
				index = 3;
			else
				index--;
			goIndex();
			time = 0;	//切换图片后令 time = 0
		}
		
		
		goNextBtn.onclick = function(){    //给下一张按钮添加鼠标点击事件
			goNext();
		}
		
		goPreBtn.onclick = function(){    //给上一张按钮添加鼠标点击事件
			goPre();
		}
		
		for (var i=0;i<points.length;i++) {    //给指示器添加点击事件
			points[i].onclick = function(){
				var pointIndex = this.getAttribute('data-index');//获取当前指示器的data-index
				index = pointIndex;    //将当前指示器的data-index 赋值给 index
				goIndex();    //调用 goIndex()方法,切换到指定的 index 图片和指示器
				time = 0;	//每次点击指示器令 time = 0
			}
		}
		
		var time = 0;	//定时器图片跳转参数

		setInterval(function(){    //设置定时器
			time++;
			if(time == 20){
				goNext();        //调用goNext()函数,实现自动轮播
				time = 0;
			}
		},100)
	}
</script>

三、效果图


四、性能分析

当前这一版本已经实现了轮播图的全部功能了,这种轮播图的轮播方式是淡入淡出式的,还有一种无缝滑动轮播方式,有时间搞它一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值