js-基础轮播图制作

话不多说直接上代码

html:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" href="./css/banner.css" />
	</head>
	<body>
		<div class="Viewable" onmouseover="Moveto()" onmouseout="Moveout()">
			<div class="content">
			</div>
			<div class="V-left" onclick="left()">
				<img src="./img/Left_arrow.png" alt="" />
			</div>
			<div class="V-right" onclick="right()">
				<img src="./img/right-arrow.png" alt="" />
			</div>
			<div class="v-round">

			</div>
		</div>
		<script>
			//获取包裹圆点的盒子
			let round = document.getElementsByClassName('v-round')[0];
			//获取包裹所有图片的盒子
			let content = document.getElementsByClassName('content')[0];
			//获取左箭头的盒子
			let vleft = document.getElementsByClassName('V-left')[0];
			//获取右箭头的盒子
			let vright = document.getElementsByClassName('V-right')[0];
			//声明数据的变量
			let data;
			//声明一个下标变量
			let k = 0;
			//声明一个图片宽度的变量
			let widths;
			//声明一个定时器的变量
			let b;
			// 设置请求方式和请求地址
			let xhr = new XMLHttpRequest();
			// 接收返回的响应数据
			xhr.open('get', 'js/banner.json', true);
			xhr.send();
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					//将获取的文本数据转换为JSON格式
					let text = xhr.responseText;
					// 调用展示商品的函数
					data = JSON.parse(text);
					// 调用函数
					prints(data);
				}
			}

			function prints(data) {
				//声明两个字符串一个为图片的,一个是圆点的
				let str = '';
				let div = "";
				//循环数据获取里面的内容
				for (let i = 0; i < data.imgs.length; i++) {
					//字符串拼接图片
					str += `<img src="${data.imgs[i]}" alt="${data.imgs[i]}">`
					//判断i是否为0
					if (i == 0) {
						//字符串拼接,给圆点一个背景颜色
						div += `<div style="background-color: red;"></div>`;
					} else {
						//圆点字符串拼接
						div += `<div></div>`
					}
				}
				//把圆点添加到放圆点的div里面
				round.innerHTML = div;
				//在拼接一个第一张图片
				str += `<img src="${data.imgs[0]}" alt="${data.imgs[0]}">`
				//把图片放到包裹图片的div里面
				content.innerHTML = str;
				//获取第一张图片
				let picture = content.getElementsByTagName('img')[0];
				//获取图片的宽度
				widths = picture.offsetWidth;
				//轮播图的定时器
				Moveout();
			}
			//获取圆点的数组
			let dot = round.getElementsByTagName('div');
			//轮播图
			function banners() {
				//每次执行让下标加一
				k++;
				//设置过渡时间
				content.style.transition = "all 1s";
				
				content.style.marginLeft = '-' + widths * k + 'px';
				if (k == dot.length) {
					dot[0].style.backgroundColor = 'red';
					dot[k - 1].style.backgroundColor = 'white';
					setTimeout(function() {
						k = 0;
						content.style.marginLeft = '-' + widths * k + 'px';
						content.style.transition = "0s";
					}, 1000)
				} else if (k < dot.length) {
					dot[k - 1].style.backgroundColor = 'white';
					dot[k].style.backgroundColor = 'red';
				}
			}
			//清除定时器
			function Moveto() {
				console.log(1);
				clearInterval(b);
			}
			//设置定时器
			function Moveout() {
				b = setInterval(banners, 3000);
				console.log(1);
			}
			//左箭头的点击事件
			function left() {
				vleft.onclick = null;
				k--;
				if (k < 0) {
					k = dot.length;
					content.style.marginLeft = '-' + widths * k + 'px';
					content.style.transition = "0s";
					setTimeout(function() {
						k--;
						dot[k].style.backgroundColor = 'red';
						dot[0].style.backgroundColor = 'white';
						content.style.marginLeft = '-' + widths * k + 'px';
						content.style.transition = "all 1s";
					}, 0)
				} else {
					dot[k + 1].style.backgroundColor = 'white';
					dot[k].style.backgroundColor = 'red';
					content.style.transition = "all 1s";
					content.style.marginLeft = '-' + widths * k + 'px';
				}
				setTimeout(function() {
					vleft.onclick = left;
				}, 1100)
			}
			//右箭头的点击事件
			function right() {
				vright.onclick = null;
				banners();
				setTimeout(function() {
					vright.onclick = right;
				}, 1500)
			}
		</script>
	</body>
</html>

css:

* {
	margin: 0%;
	padding: 0%;
}

.Viewable {
	width: 15%;
	margin: auto;
	height: 325px;
	position: relative;
	overflow: hidden;
}

.V-left {
	height: 6%;
	position: absolute;
	top: 47%;
	left: -1.5%;
	background: aqua;
}

.V-left img {
	width: 100%;
	height: 100%;
}

.V-right {
	height: 6%;
	position: absolute;
	top: 47%;
	right: -1.5%;
	background: aqua;
}

.V-right img {
	width: 100%;
	height: 100%;
}

.content {
	height: 325px;
	font-size: 0;
	display: flex;
	flex-wrap: nowrap;

}

.content img {
	width: 230px;
	height: 100%;
	flex-shrink: 0;
}

.v-round {
	width: 50%;
	height: 10px;
	border: solid 0px;
	position: absolute;
	left: 25%;
	bottom: 10px;
	display: flex;
	justify-content: space-around;
}

.v-round div {
	width: 10%;
	height: 12px;
	border-radius: 100%;
	background-color: aliceblue;
}

假数据:

{
	"imgs": [
		"./img/18d8bc3eb13533fa40fd17276d928a1941345b3c.webp",
		"./img/4034970a304e251fb75ab13d19c7be117e3e5309.webp",
		"./img/359b033b5bb5c9eacfaa73e11478c1063af3b31b.webp",
		"./img/8d5494eef01f3a2910bcc12f5864cb375d607ca6.webp",
		"./img/4e4a20a4462309f74a21b569cc4f7bf5d6cad6c3.webp"
	]
}

实际效果:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值