js实现轮播图
1.问题描述
利用js实现轮播图的功能,并且拥有按钮控制图片的切换,当鼠标移入时当前图片停止切换,移出之后接着跳转。
2.问题分析
- 首先构建相应的页面,设置css属性,再通过js获取相应的页面内容,对其做出相应的操作;
- 图片切换利用定时器实现图片的切换,先将其隐藏起来,再通过js更改相应的css属性,使其显现;
- 设置切换按钮,点击之后切换到上一张图片或者下一张图片;
- 最后设置一个鼠标移入移出的事件,当鼠标移入之后图片停止切换,移出计时器从当前开始计时。
3.代码的实现
(1)HTML代码
<body> <div class="big"> <ul> <li class="item active"><a href=""><img src="../img/01.webp" alt=""></a></li> <li class="item"><a href=""><img src="../img/02.webp" alt=""></a></li> <li class="item"><a href=""><img src="../img/03.webp" alt=""></a></li> <li class="item"><a href=""><img src="../img/04.webp" alt=""></a></li> </ul> <div id="btn-left"> <</div> <div id="btn-right">> </div> </div> <div class="circles"> <div class="circle white"></div> <div class="circle"></div> <div class="circle"></div> <div class="circle"></div> </div> </body>
(2)CSS代码
<style> .big { width: 500px; height: 300px; background-color: aqua; margin: 0 auto; position: relative; } ul li { list-style: none; position: absolute; top: 0; right: 0; width: 100%; height: 100%; } li a img { width: 100%; height: 100%; } .item { opacity: 0; } .active { opacity: 1; } .circles { position: absolute; top: 300px; right: 650px; } .white { background-color: white; } .circle { width: 10px; height: 10px; border: 1px solid #000; border-radius: 50%; margin-left: 5px; float: left; } #btn-left { width: 30px; height: 69px; font-size: 30px; color: white; background-color: rgba(0, 0, 0, 0.4); line-height: 69px; padding-left: 5px; z-index: 10; /*始终显示在图片的上层*/ position: absolute; left: 0; top: 50%; transform: translateY(-60%); /*使按钮向上偏移居中对齐*/ cursor: pointer; opacity: 0; /* 平时隐藏 */ } .big:hover #btn-left { /*鼠标滑入,显示图标*/ opacity: 1; } #btn-right { width: 26px; height: 69px; font-size: 30px; color: white; background-color: rgba(0, 0, 0, 0.4); line-height: 69px; padding-left: 5px; z-index: 10; position: absolute; right: 0; top: 50%; cursor: pointer; opacity: 0; transform: translateY(-60%); } .big:hover #btn-right { /*鼠标滑入,显示图标*/ opacity: 1; }
(3)JS代码
<script>
//获取对应的元素
var img = document.getElementsByClassName("item");
var big = document.querySelector(".big")
var circle = document.getElementsByClassName("circle");
var btnleft = document.getElementById("btn-left")
var btnright = document.getElementById("btn-right")
var i = 0;
var timer;
var index;
//图片圆点实现切换,进行循环跳转
function move() {
i = i % 4;
img[i].className = "item active";
circle[i].className = "circle white";
if (i == 0) {
circle[i + 3].className = "circle ";
} else {
circle[i - 1].className = "circle ";
}
}
//设置定时器,两秒切换一次图片
timer = setInterval(function () {
i++;
if (i == 4) {
i = 0;
clear();
}
move();
}, 2000)
//清除函数,只允许一个页面和小圆点展示
function clear() {
for (var j = 0; j < circle.length; j++) {
if (j == i) {
img[i].className = "item active";
circle[i].className = "circle white";
}else{
img[j].className = "item";
circle[j].className = "circle";
}
}
}
//鼠标移入事件,当鼠标移入时,计时器停止
big.onmouseover = function () {
clearInterval(timer);
}
//鼠标移出事件,鼠标移出之后,计时器接着开始计时
big.onmouseleave = function () {
timer = setInterval(function () {
i++;
if (i == 4) {
i = 0;
clear();
}
move();
}, 2000)
}
//图片向左切换,点击回到上一张图片
btnleft.onclick = function () {
i--;
if (i==-1) {
i = 3;
}
clear();
}
//图片向右切换,点击回到下一张图片
btnright.onclick = function () {
i++;
if (i==4) {
i = 0;
}
clear();
}
</script>
4.效果展示


浙公网安备 33010602011771号