LazyLoad - Ленивая загрузка изображений
Модуль LazyLoad реализует ленивую загрузку изображений в слайдах. Изображения загружаются только когда слайд становится видимым или близок к видимой области. Это значительно улучшает производительность и ускоряет первоначальную загрузку страницы.
Основные возможности
- ✅ Автоматическая загрузка изображений при приближении к видимой области
- ✅ Предзагрузка соседних слайдов
- ✅ Поддержка
srcsetдля адаптивных изображений - ✅ Spinner/loader во время загрузки
- ✅ События загрузки и ошибок
- ✅ Публичное API для ручной загрузки
Использование
Базовая настройка
Для использования LazyLoad нужно:
- Включить опцию
lazy - Заменить атрибуты
srcиsrcsetнаdata-srcиdata-srcset
<div class="tvist-v1">
<div class="tvist-v1__container">
<div class="tvist-v1__slide">
<img data-src="image1.jpg" alt="Slide 1">
</div>
<div class="tvist-v1__slide">
<img data-src="image2.jpg" alt="Slide 2">
</div>
<div class="tvist-v1__slide">
<img data-src="image3.jpg" alt="Slide 3">
</div>
</div>
</div>const slider = new Tvist('.tvist-v1', {
lazy: true
})С адаптивными изображениями (srcset)
<div class="tvist-v1__slide">
<img
data-src="image-800.jpg"
data-srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
sizes="(max-width: 600px) 400px, (max-width: 1000px) 800px, 1200px"
alt="Адаптивное изображение">
</div>Расширенные настройки
const slider = new Tvist('.tvist-v1', {
lazy: {
// Количество слайдов для предзагрузки с каждой стороны
preloadPrevNext: 2
},
perPage: 1
})Опции
lazy
- Тип:
boolean | { preloadPrevNext?: number } - По умолчанию:
false
Включает ленивую загрузку изображений.
// Простое включение
lazy: true
// С настройками
lazy: {
preloadPrevNext: 2 // Загружать 2 слайда до и после текущего
}lazy.preloadPrevNext
- Тип:
number - По умолчанию:
1
Количество соседних слайдов для предзагрузки с каждой стороны от активного слайда.
События
lazyLoaded
Вызывается когда изображение успешно загружено.
slider.on('lazyLoaded', (img, slideIndex) => {
console.log('Изображение загружено:', img, 'в слайде:', slideIndex)
})Параметры:
img(HTMLImageElement) - загруженное изображениеslideIndex(number) - индекс слайда
lazyLoadError
Вызывается при ошибке загрузки изображения.
slider.on('lazyLoadError', (img, slideIndex) => {
console.error('Ошибка загрузки:', img, 'в слайде:', slideIndex)
})Параметры:
img(HTMLImageElement) - изображение с ошибкойslideIndex(number) - индекс слайда
Публичное API
loadAll()
Загружает все оставшиеся изображения немедленно.
const lazyModule = slider.modules.get('lazyload')
lazyModule.loadAll()loadSlide(index)
Загружает изображения конкретного слайда.
const lazyModule = slider.modules.get('lazyload')
lazyModule.loadSlide(5) // Загрузить изображения 5-го слайдаCSS-классы
.tvist-v1__spinner
Индикатор загрузки (spinner), отображается во время загрузки изображения.
.tvist-v1__slide--loading
Класс применяется к слайду во время загрузки изображения.
Кастомизация стилей
Вы можете настроить внешний вид спиннера и состояния загрузки через CSS-переменные:
.tvist-v1 {
/* Размер спиннера */
--tvist-v1-spinner-size: 50px;
/* Цвет спиннера */
--tvist-v1-spinner-color: rgba(0, 0, 0, 0.3);
/* Оверлей во время загрузки */
--tvist-v1-loading-overlay: rgba(255, 255, 255, 0.7);
}Или переопределить стили напрямую:
.tvist-v1__spinner {
/* Ваши стили для спиннера */
}
.tvist-v1__slide--loading {
/* Ваши стили для слайда в процессе загрузки */
opacity: 0.5;
}Примеры использования
С autoplay
const slider = new Tvist('.tvist-v1', {
lazy: true,
autoplay: 3000,
loop: true
})С галереей и thumbnails
const mainSlider = new Tvist('.main-slider', {
lazy: {
preloadPrevNext: 1
}
})
const thumbsSlider = new Tvist('.thumbs-slider', {
perPage: 5,
gap: 10,
lazy: true,
isNavigation: true
})
mainSlider.updateOptions({
thumbs: { slider: thumbsSlider }
})Обработка ошибок загрузки
const slider = new Tvist('.tvist-v1', {
lazy: true,
on: {
lazyLoadError: (img, slideIndex) => {
// Заменить на изображение-заглушку
img.src = '/images/placeholder.jpg'
console.warn(`Не удалось загрузить изображение в слайде ${slideIndex}`)
}
}
})Производительность
LazyLoad значительно улучшает производительность:
- ⚡ Быстрая первоначальная загрузка страницы
- 📉 Меньше трафика для пользователей
- 🎯 Загрузка только нужных изображений
- 💾 Экономия памяти браузера
Совместимость с другими модулями
LazyLoad отлично работает с:
- ✅ Loop - корректная загрузка клонированных слайдов
- ✅ Autoplay - изображения загружаются до перехода
- ✅ Thumbs - ленивая загрузка для обоих слайдеров
- ✅ Grid - поддержка grid layout
- ✅ Effects (fade, cube) - загрузка перед эффектами
Интерактивный пример
LazyLoad - Ленивая загрузка изображений
Изображения загружаются только при приближении к видимой области. Откройте консоль браузера, чтобы увидеть события загрузки.