.carousel {
position: relative;
width: 100%;
max-width: 800px;
margin: 20px auto;
overflow: hidden;
border-radius: 8px;
}
.carousel-track {
display: flex;
transition: transform 0.5s ease;
will-change: transform;
}
.carousel-slide {
min-width: 100%;
height: auto;
object-fit: cover;
}
.nav-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
color: white;
border: none;
padding: 10px 15px;
font-size: 18px;
cursor: pointer;
z-index: 10;
border-radius: 5px;
}
.prev {
left: 10px;
}
.next {
right: 10px;
}
/ 小屏幕下可调整按钮大小 /
@media (max-width: 600px) {
.nav-btn {
padding: 8px 12px;
font-size: 16px;
}
}
const track = document.querySelector('.carousel-track');
const slides = document.querySelectorAll('.carousel-slide');
const prevBtn = document.querySelector('.prev');
const nextBtn = document.querySelector('.next');
let currentIndex = 0;
const slideWidth = slides[0].clientWidth;
function updateSlidePosition() {
track.style.transform = translateX(-${currentIndex * slideWidth}px);
}
// 初始加载时设置宽度
window.addEventListener('resize', () => {
const newWidth = slides[0].clientWidth;
track.style.transform = translateX(-${currentIndex * newWidth}px);
});
nextBtn.addEventListener('click', () => {
if (currentIndex < slides.length - 1) {
currentIndex++;
updateSlidePosition();
}
});
prevBtn.addEventListener('click', () => {
if (currentIndex > 0) {
currentIndex--;
updateSlidePosition();
}
});
