使用原生 JavaScript 实现简单轮播图
轮播图是网站中常见的一种展示方式,一般常用于:电商网站、新闻网站、企业官网 等。轮播图也是前端开发必须掌握的基础。这里就用 CSS3 + 原生 JavaScript 实现一个简单的轮播图。
注意!因为使用了 CSS3 ,所以不能在 IE10 以下的浏览器运行。
代码
HTML:
<div id="box">
<div id="img-box">
<a href="#">
<img src="https://img.alicdn.com/tfs/TB1kQJodeP2gK0jSZFoXXauIVXa-520-280.jpg_q90_.webp" alt="轮播图1">
</a>
<a href="#">
<img src="https://img.alicdn.com/simba/img/TB1PkttegaH3KVjSZFjSuwFWpXa.jpg" alt="轮播图2">
</a>
<a href="#">
<img src="https://img.alicdn.com/simba/img/TB16WIIc9f2gK0jSZFPSutsopXa.jpg" alt="轮播图3">
</a>
<a href="#">
<img src="https://img.alicdn.com/simba/img/TB1XK9eX9f2gK0jSZFPSutsopXa.jpg" alt="轮播图4">
</a>
<a href="#">
<img src="https://img.alicdn.com/tfs/TB1YE7gcW61gK0jSZFlXXXDKFXa-520-280.jpg_q90_.webp" alt="轮播图5">
</a>
</div>
<!--切换图片的按钮,每个按钮对应一张图片-->
<div id="btn-box">
<div class="btn"></div>
<div class="btn"></div>
<div class="btn"></div>
<div class="btn"></div>
<div class="btn"></div>
</div>
<!--切换上一张和下一张图片的按钮-->
<div role="button" aria-label="上一张" id="previous"><</div>
<div role="button" aria-label="下一张" id="next">></div>
</div>
这里使用了 5 张 图片,img
的图片地址是在淘宝上随便找的。
CSS:
/*清除所有的margin和padding*/
*{
margin: 0;
padding: 0;
}
/*图片框*/
#box{
width: 520px;
height: 280px;
overflow: hidden;
position: relative;
margin: 20px auto;
}
#img-box{
width: 2600px;
height: 280px;
position: absolute;
left: 0;
top: 0;
transform: translate(0px, 0);
transition: 0.4s;
}
/*图片链接*/
#img-box a{
float: left;
}
/*切换图片的按钮*/
#btn-box{
width: 100px;
height: 20px;
position: absolute;
bottom: 5px;
left: 50%;
display: flex;;
transform: translate(-50%, 0);
}
#btn-box .btn{
width: 12px;
height: 12px;
background: #ffffff;
border-radius: 50%;
margin: auto;
}
/*切换上一张和下一张图片的按钮*/
#previous,#next{
width: 30px;
height: 30px;
background: rgba(0, 0, 0, 0.5);
font-size: 20px;
line-height: 30px;
text-align: center;
border: none;
color: #ffffff;
position: absolute;
top: 50%;
transform: translate(0 , -50%);
}
#previous{
left: 0;
}
#next{
right: 0;
}
这里的轮播动画使用的是 CSS3 的 transition
,动画时间为 0.4
秒。
下面是轮播图的外观效果:
下面的 5 个 圆形按钮分别对应 5 张图片。
JS:
let imgBox = document.querySelector('#img-box'); // 需要移动的图片框
let btn = document.querySelectorAll('.btn'); // 切换图片的按钮
let previousBtn = document.querySelector('#previous'); // 切换上一张的按钮
let nextBtn = document.querySelector('#next'); // 切换下一张的按钮
let imgW = -520; // 单张图片的宽度,因为图片框是向左移动的,用负数更方便计算
let imgNum = 0; // 当前显示的图片序号
// 切换下一张图片的按钮点击
nextBtn.onclick = () => {
imgNum ++;
if (imgNum >= btn.length) {
imgNum = 0;
}
btn[imgNum].click(); // 根据图片序号调用对应的按钮点击
};
// 切换上一张图片的按钮点击
previousBtn.onclick = () => {
imgNum --;
btn[imgNum].click(); // 根据图片序号调用对应的按钮点击
if (imgNum <= 0) {
imgNum = 5;
}
};
// 设置定时器
setInterval(() => {
if (imgNum >= btn.length) {
imgNum = 0;
}
btn[imgNum].click(); // 根据图片序号调用对应的按钮点击
imgNum ++;
}, 600);
for (let i = 0;i < btn.length;i ++) {
btn[i].index = i; // 给每一个按钮添加一个对应的索引
// 切换图片的按钮点击
btn[i].onclick = ev => {
imgBox.style.transform = 'translate(' + ev.target.index * imgW + 'px)';
btnActive(ev.target.index); // 调用设置按钮选中状态的函数
imgNum = i; // 让当前显示的图片序号 = 当前按钮的序号
};
}
btnActive(0); // 调用设置按钮选中状态的函数
// 设置按钮选中状态的函数
function btnActive(btnIndex = 0) {
for (let i = 0;i < btn.length;i ++) {
btn[i].style.background = '#ffffff';
}
btn[btnIndex].style.background = '#FF5000';
}
因为没有用到任何框架和库,所以看上去代码会有点多,实际上很简单。
如果用 jQuery 的话会更简单。
效果展示
点击顺序切换按钮:
点击下方的圆形按钮:
自动轮播:
这里因为要缩短 gif 的录制时间,所以自动轮播的定时器设置为 0.6
秒,一般自动轮播的间隔时间差不多在 5 秒 左右。
代码说明
JavaScript 使用了一部分 ES6 的语法,如果要在 IE 运行需要转换为 ES5 语法。
我这里使用的是 CSS3 的 transition
动画,对于 IE10 以下的浏览器是不兼容的。如果需要兼容老的 IE 浏览器 就需要用 JS 的定时器来实现动画,不过在流畅度方便可能不如 CSS 3 的 transition
动画。
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/815/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。