WS Slider


WS Slider создаёт слайдеры с пошаговым переключением или непрерывным движением элементов.

Поддерживает

  • режимы carousel и ticker
  • слайды фиксированной или собственной ширины
  • циклическое переключение
  • автоматическое переключение слайдов
  • пагинацию и кнопки навигации
  • управление свайпом
  • адаптивные параметры
  • паузу при наведении и взаимодействии
  • автоматическое обновление при изменении размеров
  • переопределение селекторов DOM-элементов

Подключение

Импортируйте функцию wsSlider из начального файла модуля:

js
import { wsSlider } from '/core/modules/ws-slider/assets/js/initial.js';

Быстрый старт

Подготовьте корневой элемент, видимую область и дорожку со слайдами:

html
<div class="slider" data-slider>
    <div class="slider-viewport" data-slider-viewport>
        <div class="slider-track" data-slider-track>
            <div class="slider-slide" data-slider-slide>Первый слайд</div>
            <div class="slider-slide" data-slider-slide>Второй слайд</div>
            <div class="slider-slide" data-slider-slide>Третий слайд</div>
        </div>
    </div>

    <button type="button" data-slider-prev>Назад</button>
    <button type="button" data-slider-next>Вперёд</button>
    <div data-slider-pagination></div>
</div>

Скройте содержимое за пределами видимой области:

css
.slider-viewport {
    overflow: hidden;
}

Передайте корневой элемент и параметры в wsSlider():

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel',
    autoWidth: false,
    perView: 1,
    gap: 20,
    loop: true,
    swipe: true
});

При autoWidth: false ширина слайдов рассчитывается по значению perView.

HTML-структура

Корневой элемент передаётся первым аргументом в wsSlider() и не требует обязательного data-атрибута.

Обязательные элементы:

  • data-slider-viewport — видимая область слайдера
  • data-slider-track — дорожка со слайдами
  • data-slider-slide — один или несколько слайдов

Необязательные элементы:

  • data-slider-prev — кнопка перехода назад
  • data-slider-next — кнопка перехода вперёд
  • data-slider-pagination — контейнер пагинации

Модуль самостоятельно создаёт кнопки внутри контейнера пагинации.

Стандартные селекторы можно изменить через параметр selectors.

Параметры

Общие параметры

Параметр Тип По умолчанию Описание
mode string carousel Режим работы: carousel или ticker.
gap number 0 Расстояние между слайдами в пикселях.
breakpoints object {} Адаптивные параметры по ширине окна.
pauseOnHover boolean true Приостанавливает autoplay или движение ticker при наведении.
pauseOnInteraction boolean true Учитывает взаимодействие пользователя при управлении движением.
selectors object стандартные селекторы Переопределяет селекторы внутренних элементов.

Если передано неизвестное значение mode, используется режим carousel.

Параметры carousel

Параметр Тип По умолчанию Описание
startIndex number 0 Начальный индекс слайда.
autoWidth boolean true Сохраняет собственную ширину каждого слайда.
perView number 1 Количество одновременно видимых слайдов при autoWidth: false.
step number | null null Количество слайдов за одно переключение.
transition number 400 Продолжительность анимации в миллисекундах.
loop boolean false Включает циклическое переключение.
autoplay boolean false Включает автоматическое переключение.
autoplayDelay number 3000 Задержка между переключениями в миллисекундах.
pagination boolean true Включает создание и обновление пагинации.
swipe boolean false Включает переключение с помощью свайпа.
swipeThreshold number 24 Минимальное горизонтальное смещение для свайпа.
preventScrollOnSwipe boolean true Предотвращает прокрутку страницы во время горизонтального свайпа.

Если step не задан:

  • при autoWidth: true используется шаг 1
  • при autoWidth: false используется значение perView

Параметр loop применяется только при наличии нескольких страниц слайдера.

Параметры ticker

Параметр Тип По умолчанию Описание
speed number 0.5 Скорость движения ленты в пикселях за миллисекунду.
direction string left Направление движения: left или right.

Минимальное значение speed после нормализации равно 0.1.

Селекторы

Параметр selectors позволяет использовать собственные классы или data-атрибуты.

Свойство По умолчанию Назначение
viewport [data-slider-viewport] Видимая область.
track [data-slider-track] Дорожка со слайдами.
slide [data-slider-slide] Отдельный слайд.
prev [data-slider-prev] Кнопка перехода назад.
next [data-slider-next] Кнопка перехода вперёд.
pagination [data-slider-pagination] Контейнер пагинации.

Пример:

js
wsSlider(document.querySelector('.gallery'), {
    selectors: {
        viewport: '.gallery-viewport',
        track: '.gallery-track',
        slide: '.gallery-item',
        prev: '.gallery-prev',
        next: '.gallery-next',
        pagination: '.gallery-pagination'
    }
});

Обязательными остаются элементы, соответствующие селекторам viewport, track и slide.

Адаптивные параметры

Ключи объекта breakpoints обозначают минимальную ширину окна в пикселях.

В режиме carousel можно переопределять:

  • perView
  • autoWidth
  • gap
  • step

Пример:

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel',
    autoWidth: false,
    perView: 1,
    gap: 12,
    breakpoints: {
        768: {
            perView: 2,
            gap: 20
        },
        1200: {
            perView: 3,
            gap: 32
        }
    }
});

При ширине окна от 768 пикселей отображаются два слайда, а от 1200 пикселей — три.

В режиме ticker через breakpoints изменяется только gap:

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'ticker',
    gap: 16,
    breakpoints: {
        768: {
            gap: 24
        },
        1200: {
            gap: 32
        }
    }
});

carousel переключает слайды отдельными шагами.

Используйте его, если нужны:

  • кнопки перехода назад и вперёд
  • пагинация
  • автоматическое переключение
  • управление свайпом
  • отображение заданного количества слайдов
  • слайды разной ширины
  • циклическое переключение

Слайды одинаковой ширины

Установите autoWidth: false и укажите количество видимых слайдов:

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel',
    autoWidth: false,
    perView: 3,
    step: 1,
    gap: 24
});

Ширина каждого слайда рассчитывается по ширине видимой области, значению perView и расстоянию gap.

Слайды собственной ширины

При autoWidth: true модуль сохраняет ширину, заданную стилями слайда:

css
.slider-slide {
    width: 280px;
}
js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel',
    autoWidth: true,
    gap: 20
});

Этот режим включён по умолчанию.

Автоматическое переключение

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel',
    autoWidth: false,
    perView: 1,
    autoplay: true,
    autoplayDelay: 4000,
    pauseOnHover: true
});

Autoplay запускается только при наличии нескольких страниц.

Режим ticker

ticker непрерывно перемещает горизонтальную ленту.

Используйте его для:

  • логотипов
  • карточек партнёров
  • коротких сообщений
  • непрерывно движущихся списков

Пример:

js
wsSlider(document.querySelector('[data-slider]'), {
    mode: 'ticker',
    gap: 32,
    speed: 0.5,
    direction: 'left',
    pauseOnHover: true,
    pauseOnInteraction: true
});

В режиме ticker:

  • ширина слайдов определяется их содержимым или CSS
  • кнопки навигации отключаются
  • пагинация не создаётся
  • параметры autoplay и autoplayDelay не используются
  • для непрерывного движения модуль создаёт служебные копии слайдов

Публичный API

wsSlider(sliderNode, options)

Создаёт и сразу инициализирует слайдер.

Параметры:

Параметр Тип Обязательный Описание
sliderNode Element да Корневой DOM-элемент слайдера.
options object нет Параметры инициализации.

Функция возвращает инициализированный экземпляр слайдера.

Пример:

js
import { wsSlider } from '/core/modules/ws-slider/assets/js/initial.js';

wsSlider(document.querySelector('[data-slider]'), {
    mode: 'carousel'
});

Ошибки и ограничения

Модуль выбрасывает ошибку, если:

  • первым аргументом не передан DOM-элемент
  • внутри корневого элемента отсутствует viewport
  • внутри корневого элемента отсутствует track
  • внутри track отсутствуют слайды

Дополнительные ограничения:

  • модуль работает только с горизонтальным расположением слайдов
  • CSS-стили внешнего вида необходимо добавлять отдельно
  • для скрытия содержимого за пределами слайдера установите overflow: hidden у viewport
  • автоматического наблюдения за добавлением и удалением слайдов в DOM нет
  • адаптивные параметры рассчитываются по ширине окна браузера
  • пагинация и кнопки навигации предназначены для режима carousel