<style>
.box {
width: 650px;
height: 400px;
margin: 0 auto;
position: relative;
background-color: aqua;
}
#btn {
position: absolute;
left: 0;
top: 200px;
}
#btn2 {
position: absolute;
right: 0;
top: 200px
}
img {
transform: .5s;
width: 650px;
height: 400px;
}
.box .dots {
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
display: flex;
}
.box .dots span {
width: 20px;
height: 20px;
border-radius: 50%;
margin-right: 5px;
cursor: pointer;
background-color: aliceblue;
}
.box .dots span .on {
background-color: red;
}
</style>
</head>
<body>
<div class="box">
<img src="../img/pic1.webp" alt="" id="pic">
<button id="btn"><</button>
<button id="btn2">></button>
<div class="dots" id="dots">
<span class="on"></span>
<span></span>
<span></span>
</div>
</div>
</body>
<script>
var oDivs = document.getElementsByClassName("box")
var oImg = document.getElementById("pic");
var lefts = document.getElementById("btn");
var rights = document.getElementById("btn2");
var picArr = ["../img/pic1.webp", "../img/pic2.webp", "../img/pic3.webp"];
var oSpans = document.getElementById("dots").getElementsByTagName("span");
var i = 0; timer = null;
//自动播放
function autoPlay() {
timer = setInterval("lefts.onclick()", 2000)
}
autoPlay();
//左侧按钮
lefts.onclick = function () {
i--;
if (i === -1) {
i = picArr.length - 1;
}
oImg.src = picArr[i];
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
spanArr[i].className = "on";
}
// 右侧按钮
rights.onclick = function () {
i++;
if (i === picArr.length) {
i = 0;
}
oImg.src = picArr[i];
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
spanArr[i].className = "on";
}
//光标移入box时自动停止,改手动
oDivs[0].onmouseover = function () {
clearInterval(timer);
lefts.style.display = "block";
rights.style.display = "block";
}
//光标移出box时自动停止,改自动动
oDivs[0].onmouseout = function () {
autoPlay();
lefts.style.display = "none";
rights.style.display = "none";
}
//span的单击事件
var spanArr = Array.from(oSpans);
spanArr.forEach((item, idx) => {
item.onclick = function () {
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = ""; //把所有span上的类清空
}
item.className = "on" //点击哪个span,哪个span有on类
i = idx; //小圆点与图片的索引统一
oImg.src = picArr[i];
}
});
</script>
<style>
.banner {
position: relative;
width: 590px;
height: 470px;
margin: 0 auto;
}
.banner a {
display: none;
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 36px;
height: 36px;
font-size: 36px;
color: #fff;
text-align: center;
line-height: 34px;
text-decoration: none;
background-color: rgba(0, 0, 0, .4);
}
.banner .prev {
left: 0;
}
.banner .next {
right: 0;
}
.banner .dots {
position: absolute;
left: 50%;
bottom: 12px;
transform: translateX(-50%);
display: flex;
}
.banner .dots span {
width: 12px;
height: 12px;
border-radius: 50%;
margin: 0 5px;
box-shadow: 0 0 0 2px #fff;
background-color: rgb(132, 19, 19);
cursor: pointer;
}
.banner .dots span.on {
background-color: #f00;
}
</style>
</head>
<body>
<div class="banner">
<img src="img/pic1.webp" alt="" id="pic">
<a href="javascript:;" class="prev"><</a>
<a href="javascript:;" class="next">></a>
<div class="dots" id="dots">
<span class="on"></span>
<span></span>
<span></span>
</div>
</div>
</body>
<script>
var oImg = document.getElementById("pic");
var oAs = document.getElementsByTagName("a");
var oDivs = document.getElementsByClassName("banner");
var oSpans = document.getElementById("dots").getElementsByTagName("span");
var spanArr = Array.from(oSpans);
var picArr = ["img/pic1.webp", "img/pic2.jpg", "img/pic3.jpg"];
var i = 0, timer = null;
//右侧按钮
oAs[1].onclick = function () {
i++;
if (i === picArr.length) {
i = 0;
}
oImg.src = picArr[i];
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
spanArr[i].className = "on";
// console.log("i", i);
}
// 左侧按钮
oAs[0].onclick = function () {
i--;
if (i === -1) {
i = picArr.length - 1;
}
oImg.src = picArr[i];
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
spanArr[i].className = "on";
// console.log(i);
}
//自动播放
function autoPlay() {
timer = setInterval("oAs[1].onclick()", 2000)
}
autoPlay();
//光标移入 banner 自动停止 改手动
oDivs[0].onmouseover = function () {
clearInterval(timer);
oAs[0].style.display = "block";
oAs[1].style.display = "block";
}
//光标移出 banner 自动
oDivs[0].onmouseout = function () {
autoPlay();
oAs[0].style.display = "none";
oAs[1].style.display = "none";
}
//span的单击事件
spanArr.forEach((item, idx) => {
item.onclick = function () {
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
item.className = "on";//点击哪个span 哪个span有 on 类
i = idx;//小圆点与图片索引统一
// console.log("idx", i);
oImg.src = picArr[i];
}
});
// spanArr[0].onclick = function () { }
// spanArr[1].onclick = function () { }
// spanArr[2].onclick = function () { }
</script>
优化
<body>
<div class="banner">
<img src="img/pic1.webp" alt="" id="pic">
<a href="javascript:;" class="prev"><</a>
<a href="javascript:;" class="next">></a>
<div class="dots" id="dots">
<span class="on"></span>
<span></span>
<span></span>
</div>
</div>
</body>
<script>
var oImg = document.getElementById("pic");
var oAs = document.getElementsByTagName("a");
var oDivs = document.getElementsByClassName("banner");
var oSpans = document.getElementById("dots").getElementsByTagName("span");
var spanArr = Array.from(oSpans);
var picArr = ["img/pic1.webp", "img/pic2.jpg", "img/pic3.jpg"];
var i = 0, timer = null;
//右侧按钮
oAs[1].onclick = function () {
i++;
if (i === picArr.length) {
i = 0;
}
// oImg.src = picArr[i];
// for (var j = 0; j < spanArr.length; j++) {
// spanArr[j].className = "";//把所有的span上的类清空
// }
// spanArr[i].className = "on";
change(i);
// console.log("i", i);
}
// 左侧按钮
oAs[0].onclick = function () {
i--;
if (i === -1) {
i = picArr.length - 1;
}
// oImg.src = picArr[i];
// for (var j = 0; j < spanArr.length; j++) {
// spanArr[j].className = "";//把所有的span上的类清空
// }
// spanArr[i].className = "on";
change(i);
// console.log(i);
}
//自动播放
function autoPlay() {
timer = setInterval("oAs[1].onclick()", 2000)
}
autoPlay();
//光标移入 banner 自动停止 改手动
oDivs[0].onmouseover = function () {
clearInterval(timer);
oAs[0].style.display = "block";
oAs[1].style.display = "block";
}
//光标移出 banner 自动
oDivs[0].onmouseout = function () {
autoPlay();
oAs[0].style.display = "none";
oAs[1].style.display = "none";
}
//span的单击事件
spanArr.forEach((item, idx) => {
item.onclick = function () {
// for (var j = 0; j < spanArr.length; j++) {
// spanArr[j].className = "";//把所有的span上的类清空
// }
// item.className = "on";//点击哪个span 哪个span有 on 类
i = idx;//小圆点与图片索引统一
change(i);
// console.log("idx", i);
// oImg.src = picArr[i];
}
});
function change(n) {
for (var j = 0; j < spanArr.length; j++) {
spanArr[j].className = "";//把所有的span上的类清空
}
spanArr[n].className = "on";//给当前的span添加类
oImg.src = picArr[n];//修改索引对应的图片路径
}
</script>
利用偏移量实现左右点击轮播图
<style>
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
a {
text-decoration: none;
}
.banner {
position: relative;
overflow: hidden;
width: 590px;
height: 470px;
box-shadow: 0 0 0 2px #f00;
margin: 0 auto;
}
.banner .pic {
display: flex;
}
.banner .pic li {
flex-shrink: 0;
width: 590px;
height: 470px;
}
.banner>a {
position: absolute;
top: 50%;
color: #444;
font-size: 30px;
transform: translateY(-50%);
}
.banner .prev {
left: 0;
}
.banner .next {
right: 0;
}
.banner .dots {
display: flex;
position: absolute;
left: 50%;
bottom: 6px;
transform: translateX(-50%);
}
.banner .dots span {
width: 10px;
height: 10px;
background-color: #fff;
border-radius: 50%;
margin: 0 3px;
cursor: pointer;
}
.banner .dots span.on {
background-color: #f00;
}
</style>
</head>
<body>
<div class="banner">
<ul class="pic">
<li><a href="#"><img src="img/pic1.webp" alt=""></a></li>
<li><a href="#"><img src="img/pic2.jpg" alt=""></a></li>
<li><a href="#"><img src="img/pic3.jpg" alt=""></a></li>
<li><a href="#"><img src="img/pic1.webp" alt=""></a></li>
</ul>
<a href="javascript:;" class="prev"><</a>
<a href="javascript:;" class="next">></a>
<div class="dots">
<span class="on"></span>
<span></span>
<span></span>
</div>
</div>
</body>
<script>
var prev = document.querySelector(".prev");
var next = document.querySelector(".next");
var ul = document.querySelector(".banner ul");
var lis = document.querySelectorAll(".banner li");
var spans = document.querySelectorAll(".dots span");
// var liWidth = lis[0].offsetWidth;//获取一个li的宽度
var index = 0;
next.addEventListener("click", function () {
if (index >= lis.length - 1) {
index = 0;
ul.style.transition = "none";
ul.style.marginLeft = -index * lis[0].offsetWidth + 'px';
}
index++;
// console.log(index);
ul.style.marginLeft = -index * lis[0].offsetWidth + 'px';
ul.style.transition = "0.4s";
var a = index;//li的索引赋值给变量a
if (a === lis.length - 1) { //判断变量a 如果a的是最后一个图的索引时,把a修改为0
a = 0;
}
for (var j = 0; j < spans.length; j++) {
spans[j].classList.remove("on");
}
spans[a].classList.add("on");
});
prev.addEventListener("click", function () {
if (index <= 0) {
index = lis.length - 1;
ul.style.transition = "none";
ul.style.marginLeft = -index * lis[0].offsetWidth + 'px';
}
index--;
console.log(index);
ul.style.marginLeft = -index * lis[0].offsetWidth + 'px';
ul.style.transition = "0.4s";
for (var j = 0; j < spans.length; j++) {
spans[j].classList.remove("on");
}
spans[index].classList.add("on");
});
//下方小圆点的单击行为
spans.forEach((item, i) => {
item.onclick = function () {
for (var j = 0; j < spans.length; j++) {
spans[j].classList.remove("on");
}
item.classList.add("on");
index = i;//修改图片索引 使小圆点与图片索引统一
ul.style.marginLeft = -index * lis[0].offsetWidth + 'px';
ul.style.transition = "0.4s";
}
});
</script>