JS实现轮播图

JS实现轮播图

轮播图原理 下面 先介绍一下 轮播的组成部分

container 区域被称为 可视区, 然后超出个 区域的 内容 设置隐藏

请添加图片描述

在container 区域下面 有一个 carousel 区域 这个区域 放了 将要移动的图片. 我这里使用 flex 布局 把图片放在 carousel 区域

在这里插入图片描述

下面样式html以及 css 的样式文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>流浪法师</title>

		<script src="./slides.js" defer></script>
		<style>
			* {
				padding: 0;
				margin: 0;
				box-sizing: border-box;
			}

			h1 {
				text-align: center;
				margin: 25px auto;
			}

			.container {
				position: relative;
				margin: 30px auto;
				width: 782px;
				height: 573px;
				/* overflow: hidden; */
				background-color: #f5f5f5;
			}


			.carousel {
				display: flex;
				flex-wrap: nowrap;
				transition: all 0.2s;
			}

			.carousel>.item {
				width: 782px;
				height: 573px;
				flex: 0 0 782px;
			}

			.carousel>.item>img {
				height: 100%;
				width: 100%;
				object-fit: cover;
				object-position: center top;

			}

			.container .left,
			.container .right {
				width: 70px;
				height: 70px;
				position: absolute;
				top: 50%;
				transform: translateY(-50%);
				text-align: center;
				color: #f1f1f1;
				line-height: 55px;
				font-size: 55px;
				vertical-align: bottom;
				background: rgba(28, 31, 33, .1);
				border-radius: 50%;
			}


			.container .left {
				left: 0;
			}

			.container .right {
				right: 0;
			}

			.container .left:hover,
			.container .right:hover {
				background: rgba(28, 31, 33, .5);
				border-radius: 50%;
				cursor: pointer;
				font-weight: 500;
				color: #fff;
			}
		</style>
	</head>
	<body>

		<div class="wrapper">
			<h1>流浪法师</h1>
			<div class="container">
				<div class="carousel">
					<div class="item"><img src="./img/守护者雕像 瑞兹1.jpeg" alt=""></div>
					<div class="item"><img src="./img/美国大叔 瑞兹2.jpeg" alt=""></div>
					<div class="item"><img src="./img/部落精神 瑞兹3.jpeg" alt=""></div>
					<div class="item"><img src="./img/符文法师4.jpeg" alt=""></div>
				</div>

				<div class="left" οnclick="">&lt;</div>
				<div class="right" οnclick="">&gt;</div>

			</div>
		</div>

	</body>
</html>

思考 轮播图是如何移动的?

当点击右移的时候, 我们只需要把coursel 区域 整体向左移动 一个图像宽度的距离即可。

在这里插入图片描述

移动后的情况如下:

在这里插入图片描述

代码实现

我们需要在点击 右移按钮的时候, 让 carousel 区域 X 方向左移即可。

我们需要在 left, right 绑定click 事件 即可

javascript 原始 绑定 可以使用下面的方法, DOM.addEventListener() 这种方式来绑定事件.

left.addEventListener('click', function(){});
left.addEventListener('click', function(){});

代码的具体实现, 实现这个function

获取对应的dom 添加 style 样式 即可 , 有一个样式是 transform: translateX() ;X方向移动。

边界的控制

我们 边界问题比如移动到最后一张图片,该如何操作,以及在第一张图片的时候, 点击左移如何处理。

我们先来一个最简单的版本,就是 carousel 移动到边界的时候不做任何处理,不移动,不操作。

版本1

下面 是 slide.js

// 获取dom 结点 
let left = document.querySelector('.left');
let right = document.querySelector('.right');
let carousel = document.querySelector('.carousel');

// 图片总的数量
const imgCount = 4;

// 一张图片基本宽度
const imgWidth = 782;

// 默认第一张图片偏移 的位置
let currentX = 0;

// 边界位置 
const maxTranslateX = imgWidth * (imgCount - 1);

left.addEventListener('click', function() {
	// console.log('click left');
	if (currentX < 0) {
		// 没有超出范围 正常移动即可
		currentX += imgWidth;
	}
	// setting  translateX  偏移方向
	carousel.style.transform = `translateX(${currentX}px)`;
})


right.addEventListener('click', function() {
	// console.log('click right');
	// 没有超出范围就正常移动,currentX  - imgWidth
	if (Math.abs(currentX) < maxTranslateX) {
		currentX -= imgWidth;
	}
	// setting  translateX  偏移方向
	carousel.style.transform = `translateX(${currentX}px)`;
})

版本2

第二个版本

图片循环 移动,如果图片到了最后一张,则显示第一张图片 , 如果第一张图片左移,直接到最后 一张图片 即可。

下面是 slide2.js

// 获取dom 结点 
let left = document.querySelector('.left');
let right = document.querySelector('.right');
let carousel = document.querySelector('.carousel');

// 图片总的数量
const imgCount = 4;

// 一张图片基本宽度
const imgWidth = 782;

// 默认第一张图片偏移 的位置
let currentX = 0;

// 边界位置
const maxTranslateX = imgWidth * (imgCount - 1);


left.addEventListener('click', function() {
	// console.log('click left');
	if (currentX === 0) {
		// 显示最后一张图片
		currentX += imgWidth * (imgCount - 1) * -1;
	} else if (Math.abs(currentX) <= maxTranslateX) {
		// 没有超出范围 正常移动即可
		currentX += imgWidth;
	} else {
		currentX = 0;
	}
	// setting  translateX  偏移方向
	carousel.style.transform = `translateX(${currentX}px)`;
})



right.addEventListener('click', function() {
	// console.log('click right');
	// 没有超出范围就正常移动,currentX  - imgWidth
	if (Math.abs(currentX) < maxTranslateX) {
		currentX -= imgWidth;
	} else {
		// 显示第一张 幻灯片
		currentX = 0;
	}
	// setting  translateX  偏移方向
	carousel.style.transform = `translateX(${currentX}px)`;
})

总结

本文使用了 css3 的属性,transition , transform 来实现图片的轮播效果,相对简单的一点实现。

mdn css transform

mdn css transition

分享快乐,留住感动. '2022-07-08 17:47:05' --frank
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值