// 方法一:使用 CSS transitions 和 JavaScript 控制
const carousel = document.querySelector('.carousel');
const slides = Array.from(carousel.querySelectorAll('.slide'));
const prevButton = document.querySelector('.carousel-prev');
const nextButton = document.querySelector('.carousel-next');
let currentIndex = 0;
function goToSlide(index) {
// 确保索引在有效范围内
index = Math.max(0, Math.min(index, slides.length - 1));
const offset = -index * 100; // 假设每张幻灯片宽度为 100%
carousel.style.transform = `translateX(${offset}%)`;
currentIndex = index;
}
prevButton.addEventListener('click', () => {
goToSlide(currentIndex - 1);
});
nextButton.addEventListener('click', () => {
goToSlide(currentIndex + 1);
});
// 自动播放 (可选)
setInterval(() => {
goToSlide(currentIndex + 1);
}, 5000); // 每 5 秒切换一次
// HTML 结构示例:
/*
<div class="carousel">
<div class="slide">Slide 1</div>
<div class="slide">Slide 2</div>
<div class="slide">Slide 3</div>
</div>
<button class="carousel-prev">Prev</button>
<button class="carousel-next">Next</button>
*/
// CSS 样式示例:
/*
.carousel {
display: flex;
transition: transform 0.5s ease-in-out;
overflow: hidden;
}
.slide {
flex: 0 0 100%; /* 每张幻灯片占据 100% 宽度 */
width: 100%;
}
*/
// 方法二:使用 JavaScript 操作 classes 和 transition
// HTML 结构和 CSS 与方法一类似,主要区别在于 JavaScript 控制
function goToSlide(index) {
// ... (与方法一相同,确保索引有效)
slides.forEach((slide, i) => {
if (i === index) {
slide.classList.add('active');
} else {
slide.classList.remove('active');
}
});
}
// CSS 中,.active 类控制幻灯片的显示,例如:
/*
.slide {
opacity: 0;
transition: opacity 0.5s ease-in-out;
position: absolute; /* 所有 slide 重叠 */
top: 0;
left: 0;
width: 100%;
}
.slide.active {
opacity: 1;
}
*/
// 方法三:使用第三方库,例如 Swiper.js
// Swiper.js 提供了更丰富的功能和更便捷的 API
// 需要引入 Swiper.js 的 CSS 和 JS 文件
// HTML 结构示例:
/*
<div class="swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
<div class="swiper-pagination"></div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
*/
// JavaScript 初始化 Swiper:
/*
const swiper = new Swiper('.swiper', {
// 可选参数
loop: true,
autoplay: {
delay: 5000,
},
pagination: {
el: '.swiper-pagination',
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
*/
轮播图实现方法总结:
-
CSS Transitions/Animations + JavaScript: 这是最基础的实现方式,通过 JavaScript 控制元素的
transform
属性或class
来实现动画效果。优点是简单易懂,不需要依赖第三方库;缺点是功能相对简单,代码量稍大。 -
JavaScript 操作 DOM 和 Classes: 与第一种方法类似,但更侧重于使用 JavaScript 操作 DOM 元素的
class
来控制动画效果。可以结合 CSS transitions 或 animations 使用。 -
**第三方库 (例如 Swiper.js