Bạn đã từng thấy những slideshow ảnh mượt mà với hiệu ứng chuyển cảnh đẹp mắt? Trong bài hướng dẫn này, chúng ta sẽ cùng nhau xây dựng một image slider hiện đại giống như các website chuyên nghiệp — không cần thư viện ngoài, chỉ với HTML, CSS và JavaScript thuần túy.
Bạn sẽ học cách tạo hiệu ứng chuyển ảnh, thêm nút điều hướng trái/phải, hiển thị chấm tròn điều khiển ảnh, và đặc biệt là hiểu rõ từng dòng code qua từng bước một cách dễ dàng.
Dù bạn mới bắt đầu học web hay đã học lâu nhưng muốn làm chủ front-end, đây là bài hướng dẫn bạn không nên bỏ qua!
Sau bài hướng dẫn này, bạn sẽ:
- Hiểu cách hoạt động của một slider ảnh
- Biết tổ chức HTML, dùng CSS để tạo hiệu ứng chuyển động
- Biết điều khiển slider bằng JavaScript
- Biết cách tự động hoá (auto play), bắt sự kiện (click, chấm tròn)
1. Cấu trúc tổng thể slider gồm những phần gì?
Một image slider cơ bản gồm:
Thành phần | Vai trò |
---|---|
.slider-container | Ô bao toàn bộ slider |
.slider | Chứa tất cả các ảnh (.slide ) |
.slide | Mỗi ảnh đơn lẻ |
.prev / .next | Nút điều hướng trái/phải |
.dots / .dot | Dãy chấm tròn dưới ảnh (pagination) |
2. Viết HTML: Giao diện cơ bản
<div class="slider-container">
<div class="slider">
<img src="..." class="slide active" />
<img src="..." class="slide" />
...
</div>
<button class="nav prev">❮</button>
<button class="nav next">❯</button>
<div class="dots">
<span class="dot active"></span>
<span class="dot"></span>
...
</div>
</div>
Giảng giải:
<img class="slide">
: mỗi ảnh đều là một “slide”class="active"
giúp ta biết ảnh nào đang được hiển thị❮
và❯
là mã ký tự cho mũi tên trái/phải<span class="dot">
: tạo các chấm để điều hướng ảnh
3. Viết CSS: Thiết kế giao diện đẹp, đổ bóng, hiệu ứng mượt
.slider-container {
position: relative;
width: 600px;
height: 300px;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);
border-radius: 10px;
overflow: hidden;
}
Giảng giải:
position: relative
giúp định vị các nút con (absolute)box-shadow
: tạo đổ bóng đẹpoverflow: hidden
: che những slide không active
.slide {
position: absolute;
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
.slide.active {
opacity: 1;
}
Giảng giải:
- Tất cả slide chồng lên nhau (
absolute
) - Mỗi lần chỉ hiển thị 1 slide có
opacity: 1
transition
làm cho việc chuyển ảnh mượt
.nav {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: white;
border-radius: 50%;
cursor: pointer;
}
Giảng giải:
- Nút nằm giữa chiều cao (top 50% + transform)
- Làm tròn (
border-radius: 50%
) và có hiệu ứng hover
4. Viết JavaScript: Điều khiển slider bằng code
const slides = document.querySelectorAll('.slide');
const dots = document.querySelectorAll('.dot');
Giải thích:
- Tìm tất cả slide và chấm để xử lý sau
let currentIndex = 0;
let slideInterval = setInterval(nextSlide, 4000);
Giải thích:
currentIndex
: lưu ảnh đang hiển thịsetInterval
: tự động chuyển ảnh mỗi 4 giây
function showSlide(index) {
slides.forEach((slide, i) => {
slide.classList.toggle('active', i === index);
dots[i].classList.toggle('active', i === index);
});
}
Giải thích:
- Với mỗi ảnh và mỗi chấm, ta kiểm tra
i === index
để bậtactive
đúng cái cần
function nextSlide() {
currentIndex = (currentIndex + 1) % slides.length;
showSlide(currentIndex);
}
- Chuyển tới slide kế tiếp (quay vòng bằng
%
) - Cập nhật giao diện bằng
showSlide()
next.addEventListener('click', () => {
nextSlide();
resetTimer();
});
- Gắn sự kiện click vào nút
>
để chuyển slide thủ công
function resetTimer() {
clearInterval(slideInterval);
slideInterval = setInterval(nextSlide, 4000);
}
- Khi người dùng click điều hướng, ta reset lại thời gian chờ → tránh chuyển gấp
Bài tập mở rộng (nâng cao):
Tính năng nâng cấp | Gợi ý thực hiện |
---|---|
Dừng slider khi hover | Dùng mouseover , mouseout để clearInterval() |
Swipe trên điện thoại | Dùng touchstart , touchend |
Hiển thị số ảnh hiện tại | Thêm text “1/4”, thay đổi theo index |
Dùng hiệu ứng slide (không opacity) | Dùng transform: translateX() |
Kết luận
Bạn vừa hoàn thành một slider ảnh thực chiến:
- Thiết kế giao diện đẹp mắt
- Dùng HTML/CSS để trình bày
- Dùng JavaScript để điều khiển logic
- Mở rộng dễ dàng
Chúc mừng bạn đã nắm được một trong những kỹ thuật front-end quan trọng!
Thảo luận