Hiệu ứng kính lúp (magnifier) là một tính năng hữu ích cho các trang web thương mại điện tử, giúp khách hàng xem chi tiết sản phẩm một cách trực quan. Bài viết này sẽ hướng dẫn bạn triển khai hiệu ứng này sử dụng jQuery.
Cài đặt thư viện
Đầu tiên, hãy thêm các tệp tin cần thiết vào trang HTML của bạn:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="js/jquery.magnifier.min.js"></script>
<link rel="stylesheet" href="css/magnifier.css" />
Cấu trúc HTML cơ bản
Để tạo hiệu ứng kính lúp, bạn cần cấu trúc HTML như sau:
<div class="product-image">
<a class="magnifier-trigger" href="images/large/product.jpg">

</a>
</div>
Trong đó:
small/product.jpg: ảnh hiển thị ban đầularge/product.jpg: ảnh sẽ hiển thị khi zoom
Khởi tạo plugin
Cách đơn giản để kích hoạt hiệu ứng:
$(function() {
$('.magnifier-trigger').productZoom();
});
Tùy chỉnh nâng cao
Bạn có thể tùy chỉnh nhiều tham số để tạo hiệu ứng phù hợp:
$(function() {
var config = {
magnifierSize: 150,
zoomLevel: 2.5,
position: 'right',
offsetX: 20,
offsetY: 10,
fadeSpeed: 300,
showTitle: true,
titlePosition: 'bottom'
};
$('.magnifier-trigger').productZoom(config);
});
Bảng tham số cấu hình
| Thuộc tính | Kiểu dữ liệu | Mô tả | Giá trị mặc định |
|---|---|---|---|
| magnifierSize | number | Kích thước kính lúp theo pixel | 100 |
| zoomLevel | number | Mức độ phóng to (số lần ảnh gốc) | 2 |
| position | string | Vị trí cửa sổ zoom | "right" |
| offsetX | number | Khoảng cách ngang từ ảnh gốc | 10 |
| offsetY | number | Khoảng cách dọc từ ảnh gốc | 0 |
| fadeSpeed | number | Tốc độ hiệu ứng fade (ms) | 200 |
| showTitle | boolean | Hiển thị tiêu đề ảnh | true |
| titlePosition | string | Vị trí tiêu đề | "top" |
| overlayOpacity | number | Độ mờ lớp phủ | 0.5 |
| borderSize | number | Độ dày viền kính lúp | 1 |
| borderColor | string | Màu viền kính lúp | "#ccc" |
| shadow | boolean | Hiển thị bóng cho cửa sổ zoom | true |
| lensShape | string | Hình dạng kính lúp ("square" hoặc "round") | "square" |
| responsive | boolean | Tương thích với thiết bị di động | true |
| touchEnabled | boolean | Hỗ trợ thao tác cảm ứng | true |
| preloadImages | boolean | Tải trước ảnh zoom | true |
| errorImage | string | Ảnh hiển thị khi lỗi | null |
| onZoomComplete | function | Callback khi zoom hoàn tất | null |
| onImageLoad | function | Callback khi ảnh tải xong | null |
Xử lý sự kiện
Plugin cung cấp các sự kiện để bạn tùy chỉnh hành vi:
$('.magnifier-trigger').on('zoomStart', function(e) {
console.log('Bắt đầu zoom');
}).on('zoomEnd', function(e) {
console.log('Kết thúc zoom');
});
Tích hợp với gallery ảnh
Để tích hợp với bộ sưu tập ảnh:
<div class="gallery">
<div class="main-image">
<a class="magnifier-trigger" href="images/large/product1.jpg">

</a>
</div>
<div class="thumbnails">
<a href="images/large/product1.jpg" class="active">

</a>
<a href="images/large/product2.jpg">

</a>
</div>
</div>
$('.thumbnails a').click(function(e) {
e.preventDefault();
var largeUrl = $(this).attr('href');
var smallUrl = $(this).find('img').attr('src').replace('thumb', 'small');
$('.main-image img').attr('src', smallUrl);
$('.magnifier-trigger').attr('href', largeUrl)
.productZoom('refresh');
$('.thumbnails a').removeClass('active');
$(this).addClass('active');
});
Tối ưu hiệu năng
Để cải thiện hiệu năng:
- Sử dụng ảnh có kích thước phù hợp
- Bật chế độ lazy load:
preloadImages: false - Giảm kích thước kính lúp trên thiết bị di động
- Nén ảnh trước khi tải lên
if ($(window).width() < 768) {
config.magnifierSize = 80;
config.position = 'inside';
}
Xử lý lỗi
Định cấu hình xử lý khi ảnh không tải được:
$('.magnifier-trigger').productZoom({
errorImage: 'images/no-image.jpg',
onError: function(e) {
console.error('Lỗi tải ảnh:', e.error);
}
});
Plugin này tương thích với các trình duyệt hiện đại và có thể tùy chỉnh linh hoạt để phù hợp với nhiều nhu cầu khác nhau.