轮播图的实现原理(左右键切换,圆点切换)

轮播图的实现分两部分,第一部分是图片的切换,另一部分是圆的选择改变图片。

首先图片的切换,主要用到了position,每张图片都设定position:absolute;属性,并没有用到浮动的效果。还有设定好被选中的图片的样式。当点击左键时,对图片的index进行判断,若为第一张,要改变index的值为4,其他执行Index--即可;当点击右键时,对图片的index值进行判断,若为最后一张,改变index的值为0,其他执行index++即可。

随后进行圆点的切换时,首先要考虑到为每个圆点设置data-index的属性,记录每个圆点的下标值,方便js操作时获取点击圆点的下标。要操作一个for循环对每一个圆点进行监听。

具体操作如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>01</title>
	<style type="text/css">
		.wrap {
			width: 800px;
			height: 400px;
			position: relative;
		}
		ul {
			list-style: none;
		}
		.list {
			width: 800px;
			height: 400px;
			position: relative;
			padding-left: 0;
		}
		.item {
			position: absolute;
			width: 100%;
			height: 100%;
			color: #fff;
			font-size: 50px;
			opacity: 0;
			transition: all .5s;
			/*淡入淡出*/
		}
		.item:nth-child(1){
			background-color: black;
		}
		.item:nth-child(2){
			background-color: yellow;
		}
		.item:nth-child(3){
			background-color: pink;
		}
		.item:nth-child(4){
			background-color: orange;
		}
		.item:nth-child(5){
			background-color: green;
		}
		.btn {
			width: 40px;
			height: 40px;
			position: absolute;
			top: 180px;
			z-index: 1000;
		}
		#gePre {
			left: 0px;
		}
		#geNext {
			right: 0px;
		}
		.item.active {
			opacity: 1;
			z-index: 100;
		}
		/*以下为圆点样式*/
		.pointList {
			position: absolute;
			right: 20px;
			bottom: 20px;
			z-index: 1000;
		}
		.point {
			display: block;
			width: 10px;
			height: 10px;
			background-color: #666;
			float: left;
			margin-left: 20px;
			border-radius: 50%;
			border: 1px solid #fff;
		}
		.point.active {
			background-color: #fff;
		}
	</style>
</head>
<body>
	<div class="wrap">
		<ul class="list">
			<li class="item active">1</li>
			<li class="item">2</li>
			<li class="item">3</li>
			<li class="item">4</li>
			<li class="item">5</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>
			<li class="point" data-index="4"></li>	
		</ul>
		<button type="button" class="btn" id="gePre"><</button>
		<button type="button" class="btn" id="geNext">></button>
	</div>
</body>
	<script type="text/javascript">
		var items = document.getElementsByClassName('item');//图片
		var points = document.getElementsByClassName('point');//点
		var gePre = document.getElementById('gePre');
		var geNext = document.getElementById('geNext');

		var index = 0;//表示第几张图片  加上active类名

		var clearActive = function(){
			// 清楚图片的active类名
			for(var i=0;i<items.length;i++){
				items[i].className='item';
			}
			// 清楚点的active类名
			for(var i=0;i<points.length;i++){
				points[i].className='point';
			}
		}

		var goIndex = function(){
			clearActive();
			items[index].className = 'item active';
			points[index].className = 'point active';//该index下的点设置point active 类名
		}
		// 进行下一张
		var goNext = function(){
			if(index < 4){
				index++;
			}else{
				index = 0;
			}
			
			goIndex();
		}
		// 进行上一张
		var goPre = function(){
			if(index == 0){
				index = 4;
			}else{
				index--;
			}
			goIndex();
		}

		geNext.addEventListener('click',function(){
			goNext();
		})
		gePre.addEventListener('click',function(){
			goPre();
		})

		// ------圆点行为-----对每一个圆点设置监听----
		for(var i = 0;i < points.length;i++){
			points[i].addEventListener('click',function(){
				index = this.getAttribute('data-index');
				goIndex();
			})
		}

	</script>
</html>

 

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,关于左右键操作轮和小圆点切换实现方法,可以参考以下代码: HTML代码: ``` <div class="slider"> <ul class="slides"> <li><img src="img/slide1.jpg"></li> <li><img src="img/slide2.jpg"></li> <li><img src="img/slide3.jpg"></li> </ul> <a class="prev" onclick="prevSlide()">❮</a> <a class="next" onclick="nextSlide()">❯</a> <div class="dots"> <span class="dot" onclick="currentSlide(1)"></span> <span class="dot" onclick="currentSlide(2)"></span> <span class="dot" onclick="currentSlide(3)"></span> </div> </div> ``` CSS代码: ``` .slider { width: 600px; height: 400px; position: relative; overflow: hidden; } .slides { width: 1800px; height: 400px; padding: 0; margin: 0; list-style: none; position: absolute; top: 0; left: 0; } .slides li { float: left; width: 600px; height: 400px; } .prev, .next { position: absolute; top: 50%; transform: translateY(-50%); font-size: 30px; display: block; cursor: pointer; z-index: 1; } .prev { left: 10px; } .next { right: 10px; } .dots { text-align: center; margin-top: 10px; } .dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; background-color: #bbb; margin: 0 5px; cursor: pointer; } .active { background-color: #717171; } ``` JavaScript代码: ``` var slides = document.querySelector('.slides'); var slideIndex = 1; var dots = document.querySelectorAll('.dot'); function showSlide(n) { var slidesList = slides.querySelectorAll('li'); if (n > slidesList.length) { slideIndex = 1; } if (n < 1) { slideIndex = slidesList.length; } for (var i = 0; i < slidesList.length; i++) { slidesList[i].style.display = 'none'; } slidesList[slideIndex - 1].style.display = 'block'; for (var j = 0; j < dots.length; j++) { dots[j].classList.remove('active'); } dots[slideIndex - 1].classList.add('active'); } function prevSlide() { showSlide(slideIndex -= 1); } function nextSlide() { showSlide(slideIndex += 1); } function currentSlide(n) { showSlide(slideIndex = n); } showSlide(slideIndex); setInterval(function() { nextSlide(); }, 3000); ``` 这个代码同时实现左右键切换和小圆点切换左右键通过onClick事件触发prevSlide()和nextSlide()函数,小圆点通过onClick事件触发currentSlide()函数。每隔3秒钟自动切换片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值