前端轮播图实现:自动切换、手动切换与页码切换
轮播图是前端开发中常见的功能之一,本文将详细介绍如何实现一个功能完善的轮播图,包括自动切换、手动切换(上一页/下一页)和页码切换。
1. 自动切换轮播图
HTML 结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自动切换轮播图</title>
<script src="js/轮播图.js" defer></script>
<style>
* {
padding: 0;
margin: 0;
}
img {
width: 100%;
height: 100%;
}
.container {
width: 800px;
height: 500px;
background-color: red;
margin: 100px auto;
position: relative;
overflow: hidden;
}
.container ul {
width: 3200px;
height: 100%;
background-color: aqua;
display: flex;
position: absolute;
}
.container ul li {
list-style: none;
width: 800px;
}
.container ul li img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<div class="container">
<ul>
<li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
<li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
<li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
<li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
</ul>
</div>
</body>
</html>
JavaScript 实现
// 获取 ul 元素
var ul = document.querySelector("ul");
ul.style.left = "0px";
// 自动切换函数
var change = function () {
var position = parseInt(ul.style.left) - 800;
if (position < -2400) {
position = 0;
}
ul.style.left = position + "px";
};
// 设置定时器,每秒切换一次
setInterval(change, 1000);
说明
-
setInterval
用于实现自动切换。 -
当图片滚动到最后一张时,重置位置为
0
,实现循环播放。
2. 手动切换轮播图(上一页/下一页)
HTML 结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>手动切换轮播图</title>
<script src="js/轮播图.js" defer></script>
<style>
* {
padding: 0;
margin: 0;
}
img {
width: 100%;
height: 100%;
}
.container {
width: 800px;
height: 500px;
background-color: red;
margin: 100px auto;
position: relative;
overflow: hidden;
}
.container .imgbox {
width: 3200px;
height: 100%;
background-color: aqua;
display: flex;
position: absolute;
}
.container .imgbox li {
list-style: none;
width: 800px;
}
.container .imgbox li img {
width: 100%;
height: 100%;
object-fit: cover;
}
.btn {
position: absolute;
width: 750px;
height: 50px;
margin: 225px 25px;
display: flex;
justify-content: space-between;
align-items: center;
}
.btn li {
list-style: none;
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.5);
text-align: center;
line-height: 50px;
border-radius: 25px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="container">
<ul class="imgbox">
<li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
<li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
<li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
<li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
</ul>
<ul class="btn">
<li class="left"><</li>
<li class="right">></li>
</ul>
</div>
</body>
</html>
JavaScript 实现
// 获取 ul 元素和按钮
var ul = document.querySelector("ul");
var left_btn = document.querySelector(".left");
var right_btn = document.querySelector(".right");
ul.style.left = "0px";
// 轮播切换的核心方法
var change = function (offset) {
var position = parseInt(ul.style.left) + offset;
if (position < -2400) {
position = 0;
}
ul.style.left = position + "px";
};
// 上一页切换
left_btn.onclick = function () {
change(800);
};
// 下一页切换
right_btn.onclick = function () {
change(-800);
};
// 自动切换
var timer = setInterval(change, 4000);
// 避免手动自动冲突
left_btn.onmouseenter = function () {
clearInterval(timer);
};
right_btn.onmouseenter = function () {
clearInterval(timer);
};
left_btn.onmouseleave = function () {
timer = setInterval(change, 4000);
};
right_btn.onmouseleave = function () {
timer = setInterval(change, 4000);
};
说明
-
left_btn
和right_btn
分别实现上一页和下一页切换。 -
鼠标悬停时停止自动切换,移开后恢复自动切换。
3. 页码切换轮播图
HTML 结构
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页码切换轮播图</title>
<script src="js/轮播图.js" defer></script>
<style>
* {
padding: 0;
margin: 0;
}
img {
width: 100%;
height: 100%;
}
.container {
width: 800px;
height: 500px;
background-color: red;
margin: 100px auto;
position: relative;
overflow: hidden;
}
.container .imgbox {
width: 3200px;
height: 100%;
background-color: aqua;
display: flex;
position: absolute;
}
.container .imgbox li {
list-style: none;
width: 800px;
}
.container .imgbox li img {
width: 100%;
height: 100%;
object-fit: cover;
}
.btn {
position: absolute;
width: 750px;
height: 50px;
margin: 225px 25px;
display: flex;
justify-content: space-between;
align-items: center;
}
.btn li {
list-style: none;
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.5);
text-align: center;
line-height: 50px;
border-radius: 25px;
cursor: pointer;
}
.page {
position: absolute;
width: 100%;
margin-top: 438px;
display: flex;
justify-content: center;
}
.page li {
list-style: none;
border: 1px solid black;
margin: 0 3px;
padding: 3px 5px;
cursor: pointer;
background: rgba(255, 255, 255, 0.5);
font-size: 14px;
}
.page .current {
background: rgba(27, 114, 226, 0.5);
color: #fff;
}
</style>
</head>
<body>
<div class="container">
<ul class="imgbox">
<li><img src="image/45C8E05A4BA6AD530A98C868199A4A3C.jpg" alt=""></li>
<li><img src="image/9571723BF569A1E74D5E5F23E8D85028.jpg" alt=""></li>
<li><img src="image/B2727E6B05CE3F2EDC6E49AA027BFDD3.jpg" alt=""></li>
<li><img src="image/034B86D3B4421A69C1D438088451DF1C.jpg" alt=""></li>
</ul>
<ul class="btn">
<li class="left"><</li>
<li class="right">></li>
</ul>
<ul class="page">
<li class="current">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
</body>
</html>
JavaScript 实现
// 获取 ul 元素和按钮
var ul = document.querySelector("ul");
var left_btn = document.querySelector(".left");
var right_btn = document.querySelector(".right");
var page_item = document.querySelectorAll(".page li");
ul.style.left = "0px";
var oldpage = 1;
// 轮播切换的核心方法
var change = function (offset) {
var position = parseInt(ul.style.left) + offset;
if (position < -2400) {
position = 0;
}
ul.style.left = position + "px";
};
// 上一页切换
left_btn.onclick = function () {
change(800);
oldpage--;
highlight();
};
// 下一页切换
right_btn.onclick = function () {
change(-800);
oldpage++;
highlight();
};
// 自动切换
var timer = setInterval(right_btn.onclick, 4000);
// 避免手动自动冲突
left_btn.onmouseenter = function () {
clearInterval(timer);
};
right_btn.onmouseenter = function () {
clearInterval(timer);
};
left_btn.onmouseleave = function () {
timer = setInterval(left_btn.onclick, 3000);
};
right_btn.onmouseleave = function () {
timer = setInterval(right_btn.onclick, 4000);
};
// 页码样式切换函数
var highlight = function () {
if (oldpage > 4) {
oldpage = 1;
} else if (oldpage < 1) {
oldpage = 4;
}
for (var i = 0; i < page_item.length; i++) {
page_item[i].className = "";
if (i == oldpage - 1) {
page_item[i].className = "current";
}
}
};
// 任意页码切换
for (var i = 0; i < page_item.length; i++) {
page_item[i].onclick = function () {
// 图片切换
change((oldpage - this.innerText) * 800);
oldpage = this.innerText;
// 样式切换
highlight();
};
// 鼠标悬停时停止定时器
page_item[i].onmouseenter = function () {
clearInterval(timer);
};
// 鼠标离开开始定时器
page_item[i].onmouseleave = function () {
timer = setInterval(right_btn.onclick, 4000);
};
}
说明
-
通过
page_item
实现页码切换。 -
鼠标悬停在页码上时,停止自动切换,移开后恢复自动切换。
总结
通过以上实现,我们完成了轮播图的三种常见功能:
-
自动切换:通过
setInterval
实现。 -
手动切换:通过按钮点击事件实现。
-
页码切换:通过页码点击事件实现。
希望本文对你实现轮播图功能有所帮助!如果有任何问题,欢迎在评论区留言讨论。 😊