Миниатюры (или превью) изображений — это небольшие версии полноразмерных изображений, которые используются для отображения галерей или коллекций на веб-страницах. Они значительно ускоряют загрузку страниц и улучшают пользовательский интерфейс, позволяя пользователю быстро просматривать множество изображений, не загружая их в полном размере. В этой главе будет рассмотрено, как с помощью библиотеки BasicLightbox реализовать функционал для отображения изображений в формате миниатюр, а затем предоставлять возможность просмотра изображения в полном размере при клике.
Библиотека BasicLightbox предоставляет простой способ создания модальных окон для отображения изображений, видео и других типов контента. Основная цель библиотеки — создание легковесных и минималистичных всплывающих окон, которые можно интегрировать в любой проект с минимальными усилиями.
Для начала нужно подключить саму библиотеку. Это можно сделать через CDN или скачав и подключив файл напрямую.
<link href="https://cdn.jsdelivr.net/npm/basiclightbox/dist/basicLightbox.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/basiclightbox/dist/basicLightbox.min.js"></script>
После подключения библиотеки можно приступать к работе с миниатюрами в галерее.
Миниатюры изображений обычно генерируются заранее и отображаются в
виде небольших изображений с помощью тега <img>.
Чтобы создать галерею миниатюр, достаточно разместить несколько таких
изображений на странице. К примеру:
<div class="gallery">
<img src="image1_small.jpg" data-full="image1.jpg" alt="Image 1" class="thumbnail">
<img src="image2_small.jpg" data-full="image2.jpg" alt="Image 2" class="thumbnail">
<img src="image3_small.jpg" data-full="image3.jpg" alt="Image 3" class="thumbnail">
</div>
Здесь каждая миниатюра представлена изображением с классом
.thumbnail, а атрибут data-full содержит путь
к полному изображению. Такой подход позволяет эффективно загружать
только миниатюры при начальной загрузке страницы, а полные изображения
загружаются только при клике на соответствующую миниатюру.
Для того чтобы при клике на миниатюру открывалось изображение в модальном окне, необходимо использовать методы библиотеки BasicLightbox.
Чтобы сделать миниатюры интерактивными, добавим обработчик событий, который будет реагировать на клик по миниатюре и открывать полное изображение в модальном окне. Для этого используется следующий код:
document.querySelectorAll('.thumbnail').forEach(image => {
image.addEventListener('click', (event) => {
const fullImageSrc = event.target.getAttribute('data-full');
const instance = basicLightbox.create(`
<img src="${fullImageSrc}" alt="Full image">
`);
instance.show();
});
});
Здесь мы выбираем все элементы с классом .thumbnail и
добавляем обработчик события click. При клике на миниатюру
извлекается атрибут data-full, который указывает на путь к
полному изображению. Затем создается экземпляр модального окна с
использованием метода basicLightbox.create(), и полное
изображение отображается в модальном окне.
Модальное окно, созданное с помощью BasicLightbox, имеет несколько стандартных настроек, которые можно настроить под свои нужды. Библиотека позволяет легко изменять поведение окна, добавляя дополнительные опции.
Можно добавить анимацию закрытия окна, чтобы улучшить
пользовательский опыт. Для этого используем метод
instance.close() и добавляем обработчик для закрытия по
клику на фон:
document.querySelectorAll('.thumbnail').forEach(image => {
image.addEventListener('click', (event) => {
const fullImageSrc = event.target.getAttribute('data-full');
const instance = basicLightbox.create(`
<img src="${fullImageSrc}" alt="Full image">
`, {
onClose: () => console.log('Modal closed')
});
instance.show();
});
});
Также можно настроить открытие и закрытие окна с задержкой, что добавит плавность в анимацию.
Для более привлекательного отображения галереи миниатюр можно применить различные стили, которые сделают изображение на странице интерактивным.
.thumbnail {
width: 100px;
height: 100px;
object-fit: cover;
cursor: pointer;
transition: transform 0.3s ease-in-out;
}
.thumbnail:hover {
transform: scale(1.1);
}
Здесь изображение будет увеличиваться при наведении, что сделает интерфейс более динамичным и привлекательным. Также стоит учитывать, что миниатюры будут адаптироваться к размеру контейнера, сохраняя при этом пропорции изображений.
При работе с большими галереями важно оптимизировать производительность. Для этого можно использовать изображения с низким качеством для миниатюр и более качественные изображения для полноразмерных версий. Это обеспечит быструю загрузку страницы и улучшит опыт пользователя.
Также полезно использовать lazy loading для
изображений, чтобы они загружались только тогда, когда пользователь
прокручивает страницу до нужного места. Это можно реализовать с помощью
атрибута loading="lazy":
<img src="image1_small.jpg" data-full="image1.jpg" alt="Image 1" class="thumbnail" loading="lazy">
Этот атрибут заставляет браузер загружать изображение только в момент, когда оно становится видимым на экране.
Использование библиотеки BasicLightbox для работы с миниатюрами в галерее позволяет создавать легкие и интуитивно понятные интерфейсы для просмотра изображений. Миниатюры, представленные как маленькие изображения, обеспечивают удобную навигацию по коллекциям, а модальные окна позволяют пользователю быстро и удобно просматривать изображения в полном размере.