主要原理:
先创建一个定时器,每两秒就执行一次,利用transform的translateX属性让ul动起来,translateX的属性值为-index去乘以大盒子的offsetWidth,因为图片是向右走,记得加负号;index是自己定义的一个值,然后让index++,图片就可以自动播放了。
如果index大于你的图片的数量,就让index = 0;再执行transform的translateX,这样就可以做到无缝轮播。
最后再利用classList的remove和add属性实现ol的小圆跟随对应的图片动起来。
简单的移动端轮播图就完成了。
html代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./index.css">
<script src="./index.js"></script>
</head>
<body>
<div class="father">
<ul class="son">
<li><img src="../images/1.jpg" alt=""></li>
<li><img src="../images/2.jpg" alt=""></li>
<li><img src="../images/3.jpg" alt=""></li>
<li><img src="../images/4.jpg" alt=""></li>
<li><img src="../images/1.jpg" alt=""></li>
</ul>
<ol>
<li class="bianhua"></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</body>
</html>
css代码如下:
* {
margin: 0;
padding: 0;
}
.son>li>img {
width: 600px;
height: 250px;
}
li {
list-style: none;
}
.father {
width: 600px;
height: 250px;
position: relative;
margin: 100px auto;
border-radius: 20px;
overflow: hidden;
}
.son {
width: 600%;
position: absolute;
left: 0;
top: 0;
}
.son>li {
float: left;
}
ol {
position: absolute;
right: 20px;
bottom: 10px;
margin: 0;
}
ol>li {
display: inline-block;
width: 10px;
height: 10px;
background-color: red;
border-radius: 50%;
}
.bianhua {
width: 15px;
height: 10px;
border-radius: 10px;
}
js代码:
window.addEventListener('load', function() {
var father = document.querySelector('.father');
var ul = document.querySelector('.son');
var w = father.offsetWidth;
var ol = father.children[1];
var index = 0;
var itmer = setInterval(function() {
index++;
var translatex = -index * w;
ul.style.transition = 'all .3s';
ul.style.transform = 'translateX(' + translatex + 'px)';
}, 2000);
ul.addEventListener('transitionend', function() {
if (index >= 4) {
index = 0;
ul.style.transition = 'none';
var translatex = -index * w;
ul.style.transform = 'translateX(' + translatex + 'px)';
}
ol.querySelector('li.bianhua').classList.remove('bianhua');
ol.children[index].classList.add('bianhua');
})
})