<script> const carousel = document.querySelector('.carousel'); const carouselImages = carousel.querySelectorAll('img'); const cards = document.querySelectorAll('.card'); let currentIndex = 0; let intervalId = setInterval(() => { carouselImages[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % carouselImages.length; carouselImages[currentIndex].classList.add('active'); }, 3000); carousel.addEventListener('mouseover', () => { console.log(intervalId); clearInterval(intervalId); }); carousel.addEventListener('mouseleave', () => { intervalId = setInterval(() => { carouselImages[currentIndex].classList.remove('active'); currentIndex = (currentIndex + 1) % carouselImages.length; carouselImages[currentIndex].classList.add('active'); }, 3000); }); </script>简略说明该代码如何实现
时间: 2024-04-07 21:31:38 浏览: 255
这段代码实现了一个图片轮播的效果,每3秒钟自动切换下一张图片,同时当鼠标移动到轮播图上时停止自动切换,鼠标离开后重新开始自动切换。具体实现方式是利用定时器 setInterval 实现自动切换功能,并在鼠标移入和移出事件的监听函数中使用 clearInterval 和 setInterval 方法来控制定时器的启动和停止。同时,代码中还通过获取 DOM 元素和操作 class 属性来实现图片的切换。
相关问题
帮我把这堆代码简便化var carousel = document.querySelector('.carousel');var ul = carousel.querySelector('.carousel-list');var li = carousel.querySelectorAll('.carousel-item');var len = li.length;var prev = carousel.querySelector('.carousel-prev');var next = carousel.querySelector('.carousel-next');var dots = carousel.querySelectorAll('.carousel-dot');var currentIndex = 0;var timer = null;function play() { timer = setInterval(function() { currentIndex++; if(currentIndex >= len) { currentIndex = 0; } changeTo(currentIndex); }, 2000);}function changeTo(index) { ul.style.left = -index * 500 + 'px'; for(var i = 0; i < len; i++) { dots[i].className = 'carousel-dot'; } dots[index].className = 'carousel-dot active'; currentIndex = index;}play();prev.onclick = function() { currentIndex--; if(currentIndex < 0) { currentIndex = len - 1; } changeTo(currentIndex);}next.onclick = function() { currentIndex++; if(currentIndex >= len) { currentIndex = 0; } changeTo(currentIndex);}for(var i = 0; i < len; i++) { dots[i].index = i; dots[i].onclick = function() { changeTo(this.index); }}carousel.onmouseover = function() { clearInterval(timer);}carousel.onmouseout = function() { play();}
以下是简化后的代码:
const carousel = document.querySelector('.carousel');
const ul = carousel.querySelector('.carousel-list');
const li = carousel.querySelectorAll('.carousel-item');
const len = li.length;
const prev = carousel.querySelector('.carousel-prev');
const next = carousel.querySelector('.carousel-next');
const dots = carousel.querySelectorAll('.carousel-dot');
let currentIndex = 0;
let timer = null;
function play() {
timer = setInterval(() => {
currentIndex++;
if (currentIndex >= len) {
currentIndex = 0;
}
changeTo(currentIndex);
}, 2000);
}
function changeTo(index) {
ul.style.left = -index * 500 + 'px';
dots.forEach(dot => dot.classList.remove('active'));
dots[index].classList.add('active');
currentIndex = index;
}
play();
prev.onclick = () => {
currentIndex--;
if (currentIndex < 0) {
currentIndex = len - 1;
}
changeTo(currentIndex);
};
next.onclick = () => {
currentIndex++;
if (currentIndex >= len) {
currentIndex = 0;
}
changeTo(currentIndex);
};
dots.forEach((dot, index) => {
dot.index = index;
dot.onclick = function() {
changeTo(this.index);
}
});
carousel.onmouseover = () => clearInterval(timer);
carousel.onmouseout = () => play();
写一个carousel示例
好的,这里给您提供一个简单的carousel示例,使用HTML、CSS和JavaScript实现:
HTML代码:
```
<div class="carousel-container">
<div class="carousel-slide">
<img src="https://via.placeholder.com/500x250?text=Slide%201" alt="Slide 1">
<img src="https://via.placeholder.com/500x250?text=Slide%202" alt="Slide 2">
<img src="https://via.placeholder.com/500x250?text=Slide%203" alt="Slide 3">
</div>
<button class="carousel-prev">❮</button>
<button class="carousel-next">❯</button>
</div>
```
CSS代码:
```
.carousel-container {
position: relative;
width: 500px;
height: 250px;
margin: 0 auto;
overflow: hidden;
}
.carousel-slide {
display: flex;
width: 100%;
height: 100%;
}
.carousel-slide img {
width: 100%;
height: 100%;
object-fit: cover;
}
.carousel-prev,
.carousel-next {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 40px;
height: 40px;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
border: none;
outline: none;
cursor: pointer;
}
.carousel-prev {
left: 0;
}
.carousel-next {
right: 0;
}
```
JavaScript代码:
```
const carouselSlide = document.querySelector(".carousel-slide");
const carouselImages = document.querySelectorAll(".carousel-slide img");
// Buttons
const prevBtn = document.querySelector(".carousel-prev");
const nextBtn = document.querySelector(".carousel-next");
// Counter
let counter = 1;
const size = carouselImages[0].clientWidth;
carouselSlide.style.transform = "translateX(" + (-size * counter) + "px)";
// Button listeners
nextBtn.addEventListener("click", () => {
if (counter >= carouselImages.length - 1) return;
carouselSlide.style.transition = "transform 0.4s ease-in-out";
counter++;
carouselSlide.style.transform = "translateX(" + (-size * counter) + "px)";
});
prevBtn.addEventListener("click", () => {
if (counter <= 0) return;
carouselSlide.style.transition = "transform 0.4s ease-in-out";
counter--;
carouselSlide.style.transform = "translateX(" + (-size * counter) + "px)";
});
// Transition listener
carouselSlide.addEventListener("transitionend", () => {
if (carouselImages[counter].alt === "lastClone") {
carouselSlide.style.transition = "none";
counter = carouselImages.length - 2;
carouselSlide.style.transform = "translateX(" + (-size * counter) + "px)";
}
if (carouselImages[counter].alt === "firstClone") {
carouselSlide.style.transition = "none";
counter = carouselImages.length - counter;
carouselSlide.style.transform = "translateX(" + (-size * counter) + "px)";
}
});
```
这个示例实现了一个基本的carousel功能,包括图片轮播和左右箭头按钮。您可以根据自己的需求进行修改和扩展。
阅读全文