Для создания бесконечного thumbnail в swiper slider вам потребуется несколько шагов. Данный процесс требует некоторые знания о JavaScript и работе с библиотекой Swiper. Вот пошаговое объяснение:
Шаг 1: Подключение библиотеки Swiper
Убедитесь, что у вас установлена и подключена последняя версия библиотеки Swiper в вашем проекте. Вы можете скачать ее с официального сайта или использовать CDN, например:
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" /> <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
Шаг 2: HTML-разметка
Создайте контейнер для вашего слайдера и его thumbnail. Убедитесь, что контейнеры имеют соответствующие классы:
<div class="swiper-container"> <div class="swiper-wrapper"> <!-- Слайды --> </div> </div> <div class="swiper-container-thumbnails"> <div class="swiper-wrapper"> <!-- Thumbnail-ы --> </div> </div>
Шаг 3: Инициализация swiper slider
Используйте JavaScript для инициализации swiper слайдера с параметрами, которые вам требуются. Обратите внимание на thumbnail параметр, который позволяет связать слайды и thumbnail-ы:
var swiper = new Swiper('.swiper-container', { slidesPerView: 1, spaceBetween: 10, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, thumbs: { swiper: { el: '.swiper-container-thumbnails', slidesPerView: 3, spaceBetween: 10 } } });
Шаг 4: Добавление бесконечного thumbnail
Swiper не предоставляет встроенной опции для бесконечности thumbnail. Однако, вы можете достичь этого, добавив копии thumbnail-ов в начало и конец контейнера thumbnail-ов:
var thumbnailsSwiper = new Swiper('.swiper-container-thumbnails', { slidesPerView: 3, spaceBetween: 10, loop: true, loopedSlides: 5, // Количество thumbnail-ов slideDuplicateClass: 'swiper-slide-duplicate-thumbnails',// Класс дублированных thumbnail-ов navigation: { nextEl: '.swiper-button-next-thumbnails', prevEl: '.swiper-button-prev-thumbnails', }, on: { slideDuplicate: function () { // Добавление дубликатов thumbnail-ов var $firstSlides = this.$el.find('.swiper-slide:nth-child(-n+' + this.loopedSlides + ')'); var $lastSlides = this.$el.find('.swiper-slide:nth-last-child(-n+' + this.loopedSlides + ')'); $firstSlides.clone().addClass('swiper-slide-duplicate-thumbnails').appendTo(this.$el.find('.swiper-wrapper')); $lastSlides.clone().addClass('swiper-slide-duplicate-thumbnails').prependTo(this.$el.find('.swiper-wrapper')); } } });
Теперь ваш swiper slider должен отображать бесконечный thumbnail. Вы можете настроить опции swiper и внешний вид в соответствии с вашими потребностями. Помните, что необходимо включить CSS стили, чтобы отображать эти контейнеры и кнопки навигации (например, .swiper-button-next-thumbnails
, .swiper-button-prev-thumbnails
).
Вот вам пример, как это может выглядеть в итоге. Он не полный, но дает вам представление о том, как всё это работает:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" /> <style> .swiper-container-thumbnails { max-width: 300px; margin: 0 auto; background-color: #f0f0f0; } .swiper-container-thumbnails .swiper-wrapper { display: flex; justify-content: flex-start; align-items: center; } .swiper-container-thumbnails .swiper-slide { width: 80px; height: 60px; display: flex; justify-content: center; align-items: center; background-color: #c0c0c0; color: #ffffff; } .swiper-container .swiper-wrapper .swiper-slide { width: 100%; display: flex; justify-content: center; align-items: center; font-size: 50px; } </style> </head> <body> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide">1</div> <div class="swiper-slide">2</div> <div class="swiper-slide">3</div> <div class="swiper-slide">4</div> <div class="swiper-slide">5</div> <div class="swiper-slide">6</div> </div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> <div class="swiper-container-thumbnails"> <div class="swiper-wrapper"> <div class="swiper-slide">1</div> <div class="swiper-slide">2</div> <div class="swiper-slide">3</div> <div class="swiper-slide">4</div> <div class="swiper-slide">5</div> <div class="swiper-slide">6</div> </div> <div class="swiper-button-prev-thumbnails"></div> <div class="swiper-button-next-thumbnails"></div> </div> <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script> <script> var swiper = new Swiper('.swiper-container', { slidesPerView: 1, spaceBetween: 10, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, thumbs: { swiper: { el: '.swiper-container-thumbnails', slidesPerView: 3, spaceBetween: 10 } } }); var thumbnailsSwiper = new Swiper('.swiper-container-thumbnails', { slidesPerView: 3, spaceBetween: 10, loop: true, loopedSlides: 6, slideDuplicateClass: 'swiper-slide-duplicate-thumbnails', navigation: { nextEl: '.swiper-button-next-thumbnails', prevEl: '.swiper-button-prev-thumbnails', }, on: { slideDuplicate: function () { var $firstSlides = this.$el.find('.swiper-slide:nth-child(-n+' + this.loopedSlides + ')'); var $lastSlides = this.$el.find('.swiper-slide:nth-last-child(-n+' + this.loopedSlides + ')'); $firstSlides.clone().addClass('swiper-slide-duplicate-thumbnails').appendTo(this.$el.find('.swiper-wrapper')); $lastSlides.clone().addClass('swiper-slide-duplicate-thumbnails').prependTo(this.$el.find('.swiper-wrapper')); } } }); </script> </body> </html>
Теперь вы можете модифицировать этот пример, чтобы он соответствовал вашим потребностям и стилям.