Primero muestre el efecto real:
La antigua regla, vaya directamente al código:
<!DOCTYPE html>
<html>
<head>
<style>
/* CSS样式代码 */
.slider-container {
position: relative;
width: 600px;
/* 设置轮播图容器宽度 */
height: 400px;
/* 设置轮播图容器高度 */
overflow: hidden;
/* 隐藏超出容器的部分 */
margin: 0 auto;
}
.slider {
display: flex;
transition: transform 0.3s ease-in-out;
/* 添加过渡效果 */
}
.slider-item {
flex-shrink: 0;
width: 100%;
/* 设置每张图片的宽度 */
height: 100%;
/* 设置每张图片的高度 */
}
.slider-item img {
width: 100%;
/* 设置每张图片的宽度 */
height: 100%;
/* 设置每张图片的高度 */
}
.slider-controls {
position: absolute;
top: 50%;
transform: translateY(-50%);
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
z-index: 1;
/* 将导航按钮置于轮播图上方 */
}
.slider-controls button {
background-color: #333;
color: #fff;
border: none;
padding: 5px 10px;
margin: 0 5px;
cursor: pointer;
}
.slider-controls .prev-btn::before,
.slider-controls .next-btn::after {
content: "";
display: inline-block;
width: 10px;
height: 10px;
border-top: 2px solid #fff;
border-right: 2px solid #fff;
transform: rotate(45deg);
margin-right: 5px;
}
.slider-controls .prev-btn::before {
transform: rotate(-135deg);
margin-right: 0;
margin-left: 5px;
}
</style>
</head>
<body>
<div class="slider-container">
<div class="slider">
<div class="slider-item">
<img src="./img/1.jpg" alt="Image 1">
</div>
<div class="slider-item">
<img src="./img/2.jpg" alt="Image 2">
</div>
<div class="slider-item">
<img src="./img/3.jpg" alt="Image 3">
</div>
<div class="slider-item">
<img src="./img/4.jpg" alt="Image 4">
</div>
</div>
<div class="slider-controls">
<button class="prev-btn"></button>
<button class="next-btn"></button>
</div>
</div>
<script>
const sliderContainer = document.querySelector('.slider-container');
const slider = document.querySelector('.slider');
const prevBtn = document.querySelector('.prev-btn');
const nextBtn = document.querySelector('.next-btn');
const slideWidth = document.querySelector('.slider-item').offsetWidth;
let currentPosition = 0;
let isPaused = false;
// 自动轮播
const autoPlay = () => {
if (!isPaused) {
currentPosition -= slideWidth;
if (currentPosition <= -(slideWidth * (slider.children.length - 1))) {
currentPosition = 0;
}
slider.style.transform = `translateX(${currentPosition}px)`;
}
setTimeout(autoPlay, 2000);
};
// 鼠标悬停/离开事件监听器
sliderContainer.addEventListener('mouseenter', () => {
isPaused = true;
});
sliderContainer.addEventListener('mouseleave', () => {
isPaused = false;
});
// 上一页按钮点击事件监听器
prevBtn.addEventListener('click', () => {
currentPosition += slideWidth;
if (currentPosition > 0) {
currentPosition = -(slideWidth * (slider.children.length-1));
}
slider.style.transform = `translateX(${currentPosition}px)`;
});
// 下一页按钮点击事件监听器
nextBtn.addEventListener('click', () => {
currentPosition -= slideWidth;
if (currentPosition <= -(slideWidth * (slider.children.length))) {
currentPosition = 0;
}
slider.style.transform = `translateX(${currentPosition}px)`;
});
// 启动自动轮播
autoPlay();
</script>
</body>
</html>
Este código implementa una función de carrusel simple. Las funciones específicas son las siguientes:
1. Función de carrusel automático: utilice la función `autoPlay()` para lograr el efecto de cambiar automáticamente las imágenes. La función primero verifica el valor de la variable `isPaused`. Si es `false`, lo que significa que no hay pausa, entonces `currentPosition` se resta del ancho de la imagen. Luego verifique si se ha alcanzado la última imagen y, de ser así, restablezca `currentPosition` a 0 para lograr un efecto de reproducción en bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen. Luego use el método `setTimeout()` para llamar a la función `autoPlay()` en un bucle cronometrado para implementar la función de reproducción automática.
// 自动轮播
const autoPlay = () => {
if (!isPaused) {
currentPosition -= slideWidth;
if (currentPosition <= -(slideWidth * (slider.children.length - 1))) {
currentPosition = 0;
}
slider.style.transform = `translateX(${currentPosition}px)`;
}
setTimeout(autoPlay, 2000);
};
2. Función de pasar el mouse sobre/salir del evento: Al usar el método `addEventListener()`, los detectores de eventos `mouseenter` y `mouseleave` se agregan al contenedor del carrusel. Cuando el mouse ingresa al contenedor, establezca la variable `isPaused` en `true`, lo que significa pausar el carrusel automático. Cuando el mouse salga del contenedor, establezca la variable `isPaused` en `false` para reanudar el carrusel automático.
// 鼠标悬停/离开事件监听器
sliderContainer.addEventListener('mouseenter', () => {
isPaused = true;
});
sliderContainer.addEventListener('mouseleave', () => {
isPaused = false;
});
3. Función de evento de clic en el botón de la página anterior: al utilizar el método `addEventListener()`, se agrega un detector de eventos `click` al botón de la página anterior. Cuando se hace clic en el botón, aumente `currentPosition` por el ancho de la imagen. Luego verifique si se ha alcanzado la primera imagen. Si es así, configure `currentPosition` en la posición de la última imagen para lograr un efecto de cambio de bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen.
// 上一页按钮点击事件监听器
prevBtn.addEventListener('click', () => {
currentPosition += slideWidth;
if (currentPosition > 0) {
currentPosition = -(slideWidth * (slider.children.length-1));
}
slider.style.transform = `translateX(${currentPosition}px)`;
});
4. Función de evento de clic en el botón de la página siguiente: al utilizar el método `addEventListener()`, se agrega un detector de eventos `click` al botón de la página siguiente. Cuando se hace clic en el botón, `currentPosition` se resta del ancho de la imagen. Luego verifique si se ha alcanzado la última imagen y, de ser así, restablezca `currentPosition` a 0 para lograr un efecto de cambio de bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen.
// 下一页按钮点击事件监听器
nextBtn.addEventListener('click', () => {
currentPosition -= slideWidth;
if (currentPosition <= -(slideWidth * (slider.children.length))) {
currentPosition = 0;
}
slider.style.transform = `translateX(${currentPosition}px)`;
});
Si lo encuentras útil, por favor dale me gusta TAT