html+css+js轮播图:手动轮播,自动轮播

原理:设置图片层的总长=单张图片长度*张数;在轮播层中利用overflow只留出一张图片的显示; 通过图片层的left来显示轮播的每一张图,第一张为0,为了后面的图片显示,left的值左移为负数。
原理图

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>轮播图</title>
<!-- <script type="text/javascript" src="demo.js"></script> -->
</head>
<style type="text/css">
	*{
		margin: 0;
		padding: 0;
	}
	ul{
		list-style: none;
	}
	a{
        text-decoration: none;
    }
	#container{
		position: relative;
		width: 500px;
		height: 260px;
		margin: 20px auto;
		overflow: hidden; /*溢出隐藏:只显示一张图片*/
	}
	#container .parent{
		position: absolute;
		width: 2500px; /*整个图片层长度:500*5=2500*/
		height: 260px;
	}
	
	#container .parent li{
		float: left;
		width: 500px;
		height: 100%;
	}
	#container .parent li img{
		width: 100%;
		height: 100%;
	}
	#container .btnLeft,
	#container .btnRight{
		width: 30px;
	    height: 30px;
	    background-color: #9E9E9E;
	    border-radius: 20%;
	    opacity: 80%;
	    position: absolute; /*包含块为图片显示层container*/
	    top: 0;
	    bottom: 0;
	    margin: auto;
	    font-size: 20px;
   	 	color: #f40;
   	 	text-align: center;
   	 	line-height: 30px;
	}
	#container .btnLeft{
	    left: 10px;
	}
	#container .btnRight{
		right: 10px;
	}
	#container .btnLeft:hover,
	#container .btnRight:hover{
		opacity: 90%;
		cursor: pointer;
	}
	/*蒙层*/
	#container .modal{
		width: 100%;
		height: 40px;
		background: rgba(0,0,0,.3);
		position: absolute;
		left: 0;
		bottom: 0;
		line-height: 40px;
		padding: 0 40px;
		box-sizing: border-box;
	}
	#container .modal .title{
		float: left;
		color: #fff;
		font-size: 12px;
	}
	#container .modal .dots{
		float: right;
		position: absolute;
		bottom: 10px;
		left: 340px;
	}
	#container .modal .dots li{
		width: 15px;
		height: 15px;
		border-radius: 50%;
		float: left;
		/*可以使用行块盒*/
		/*display: inline-block;*/
		margin: 0 5px;
		cursor: pointer;
	}
	.clearfix::after{
		content: "";
		display: block;
		clear: both;
	}
	.on{
		background-color: red;
	}
	.off{
		background-color: gray;
	}
</style>
<body>
<div id="container">
	<ul class="parent" style="left: 0;">
		<li><img src="1.jpg"></li>
		<li><img src="2.jpg"></li>
		<li><img src="3.jpg"></li>
		<li><img src="4.jpg"></li>
		<li><img src="5.jpg"></li>
	</ul>

	<div class="btnLeft">&lt;</div>
	<div class="btnRight">&gt;</div>
	<div class="modal">
		<div class="title">
			<h2>轮播图</h2>
		</div>
		<div class="dots">
			<ul class="clearfix">
				<li class="on"></li>
				<li class="off"></li>
				<li class="off"></li>
				<li class="off"></li>
				<li class="off"></li>
			</ul>
		</div>
	</div>
</div>
<script type="text/javascript">
	
var imgShow = document.getElementsByClassName('parent')[0],
	dotList = document.querySelectorAll('.dots >.clearfix > li');
var btnLeft = document.getElementsByClassName('btnLeft')[0],
    btnRight = document.getElementsByClassName('btnRight')[0];
var dotLen = dotList.length,
	index = 0; //轮播层的图片索引,0表示第一张

//圆点显示
function showRadius() {
	for(var i = 0; i < dotLen; i++) {
		if(dotList[i].className === "on"){
			dotList[i].className = "off";
		}
	}
	dotList[index].className = "on";
}

//向左移动
btnLeft.onclick = function() {
	index--;
    if(index < 0){  /*第1张向左时,变为第5张*/
        index = 4;
    }
    showRadius();
	var left;
	var imgLeft = imgShow.style.left;
	if(imgLeft === "0px") { /*当是第1张时,每张图片左移,移4张图,位置为-(4*500)*/
		left = -2000;
	}
	else{
		left = parseInt(imgLeft) + 500; /*由于left为负数,每左移一张加500*/
	}
	imgShow.style.left = left + "px";
}

//向右移动
btnRight.onclick = function() {
	index++;
    if(index > 4){  /*第5张向右时,变为第1张*/
        index = 0;
    }
    showRadius();
	var right;
	var imgLeft = imgShow.style.left;
	if(imgLeft === "-2000px") { /*当是第5张时,第1张的位置为0*/
		right = 0;
	}
	else{
		right = parseInt(imgLeft) - 500; /*由于left为负数,每右移一张减500*/
	}
	imgShow.style.left = right + "px";
}

// 自动轮播
/*var timer;
function autoPlay() {
	timer = setInterval(function() {
		var right;
		var imgLeft = imgShow.style.left;
		if(imgLeft === "-2000px") {
			right = 0;
		}
		else{
			right = parseInt(imgLeft) - 500;
		}
		imgShow.style.left = right + "px";
	} ,1000)
}
autoPlay();*/

for(var i = 0; i < dotLen; i++) {
    /*利用闭包传递索引*/
    (function(i) {
        dotList[i].onclick = function() {
	        var dis = index - i; //当前位置和点击的距离
	        imgShow.style.left = (parseInt(imgShow.style.left) + dis * 500) + "px";
	        index = i; //显示当前位置的圆点
	        showRadius();
    	}
    })(i);
}

</script>

</body>
</html>

效果:按钮左右滑动图片,图片上的小圆点也可以选择图片。
在这里插入图片描述
在这里插入图片描述

  • 48
    点赞
  • 281
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
以下是一个简单的HTMLCSSJS轮播图的示例: ```html <!DOCTYPE html> <html> <head> <title>轮播图</title> <style> .container { width: 600px; height: 400px; position: relative; overflow: hidden; } .container img { width: 100%; height: 100%; position: absolute; top: 0; left: 0; opacity: 0; transition: opacity 1s ease-in-out; } .container img.active { opacity: 1; } .controls { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); display: flex; } .controls button { background-color: #fff; border: none; margin-right: 10px; cursor: pointer; } </style> </head> <body> <div class="container"> <img src="img1.jpg" class="active"> <img src="img2.jpg"> <img src="img3.jpg"> </div> <div class="controls"> <button onclick="prevSlide()">上一张</button> <button onclick="nextSlide()">下一张</button> </div> <script> var slides = document.querySelectorAll('.container img'); var currentSlide = 0; function nextSlide() { slides[currentSlide].classList.remove('active'); currentSlide = (currentSlide + 1) % slides.length; slides[currentSlide].classList.add('active'); } function prevSlide() { slides[currentSlide].classList.remove('active'); currentSlide = (currentSlide - 1 + slides.length) % slides.length; slides[currentSlide].classList.add('active'); } setInterval(nextSlide, 5000); </script> </body> </html> ``` 这个轮播图使用了一个包含三张图片的容器,每张图片都是绝对定位的,并且默认情况下不可见。通过添加和删除“active”类来控制哪张图片可见。轮播图还包括两个按钮,用于手动切换图片。最后,使用JavaScript设置了一个定时器,每隔5秒钟自动切换到下一张图片。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值