Справочник API

Параметры, методы, свойства, события и настройки модулей Tvist на одной странице. Имена записей — постоянные ссылки; пояснения и примеры доступны сразу.

Инициализация

import Tvist from 'tvist'
import 'tvist/dist/tvist.css'

const slider = new Tvist('.slider', {
  perPage: 3,
  gap: 20,
  arrows: true,
  pagination: true,
})

slider.next()

Первый аргумент — CSS-селектор или HTMLElement, второй — объект опций. Индексы слайдов начинаются с нуля. Полная сборка регистрирует встроенные модули автоматически.

Разметка и быстрый старт · Браузерная сборка · Живые примеры · Конструктор

Опции

Параметры конструктора new Tvist(target, options). Вложенные настройки включённого модуля приведены в его разделе.

ОпцияТипПо умолчаниюОписание
arrowsboolean | { prev?: string | HTMLElement; next?: string | HTMLElement; disabledClass?: string; hiddenClass?: string; addIcons?: boolean; hideWhenSinglePage?: boolean; }false

Навигационные стрелки. true — поиск по стандартным классам и создание недостающих кнопок внутри root, объект — кастомная настройка. Созданные кнопки удаляются при отключении опции или destroy().

Пользовательские элементы сохраняются после destroy(). Кнопки могут находиться вне слайдера.

const slider = new Tvist('.slider', {
  arrows: { prev: '#prev', next: '#next', addIcons: false },
})

Примеры навигации.

Вложенные настройки →

autoHeightbooleanfalse

Если true, высота слайдов определяется их содержимым (для вертикального направления). Рекомендуется perPage: 1.

autoplayboolean | number | AutoplayOptionsfalse

Автопрокрутка слайдов.

  • false — выключена (по умолчанию)
  • true — включена с задержкой 3000мс и дефолтными настройками
  • number — включена с указанной задержкой в миллисекундах
  • AutoplayOptions — полный контроль: delay, pauseOnHover, pauseOnFocus, pauseOnInteraction, disableOnInteraction, waitForVideo

Число задаёт задержку в миллисекундах. Управлять работающей автопрокруткой можно через slider.autoplay; без активного модуля это свойство возвращает undefined.

const slider = new Tvist('.slider', {
  loop: true,
  autoplay: { delay: 3000, pauseOnHover: true },
})
slider.autoplay?.pause()
slider.autoplay?.resume()

Примеры автопрокрутки.

Вложенные настройки →

autoWidthbooleanfalse

Если true, ширина слайдов определяется их содержимым (не задаётся слайдером). Рекомендуется perPage: 1.

breakpointsRecord<number, Partial<TvistOptions> & { enabled?: boolean; }>undefined

Адаптивные настройки по breakpoints. Ключ - ширина экрана в пикселях

Ключ — максимальная ширина в пикселях. При совпадении нескольких условий применяется наименьший подходящий breakpoint; за пределами условий восстанавливаются базовые опции.

const slider = new Tvist('.slider', {
  perPage: 3,
  breakpoints: {
    1024: { perPage: 2 },
    640: { perPage: 1 },
  },
})

Подробности breakpoints · Живой пример.

breakpointsBase'window' | 'container''window'

База для расчёта breakpoints

browserFixesBrowserFixesOptions{ firefoxImageDecoding: true }

Специфичные фиксы для браузеров

Вложенные настройки →

centerboolean | CenterOptionsfalse

Центрирование слайдов.

  • true — центрирует активный слайд в viewport (режим “active”).
  • Объект { active?, focus?, justify? } — тонкая настройка:
    • active: true — центрирует активный слайд всегда, включая края (аналог center: true)
    • focus: true — центрирует активный слайд, когда возможно; у краёв без пустот (как Splide focus:center)
    • justify: true — визуально центрирует все слайды когда locked (как justify-content: center)

Примеры центрирования.

Вложенные настройки →

cubeEffect{ slideShadows?: boolean; shadow?: boolean; shadowOffset?: number; shadowScale?: number; perspective?: number; perspectiveOriginY?: number; viewportPadding?: number; }—

Настройки cube эффекта

Вложенные настройки →

debugbooleanfalse

Режим отладки: вывод предупреждений в консоль (arrows not found, container not found и т.д.)

direction'horizontal' | 'vertical''horizontal'

Направление прокрутки слайдера

dragboolean | 'free'true

Включить перетаскивание слайдов. ‘free’ - свободная прокрутка без привязки к слайдам

const slider = new Tvist('.slider', {
  drag: 'free',
  freeSnap: true,
  flickPower: 600,
})

Свободное перетаскивание.

dragSpeednumber1

Множитель скорости перетаскивания

effect'slide' | 'fade' | 'cube''slide'

Эффект перехода между слайдами

enabledbooleantrue

Включить/выключить слайдер. При false слайдер не инициализируется (статичный контент)

При false слайдер показывает статичный контент. Управлять состоянием можно через enable(), disable() и updateOptions({ enabled }).

fadeEffect{ crossFade?: boolean; }—

Настройки fade эффекта

Вложенные настройки →

fixedHeightnumber | string—

Фиксированная высота слайда (px или CSS). Для вертикального направления: число видимых рядов считается по высоте контейнера, perPage перезаписывается при пересчёте. Для горизонтального направления задаёт только высоту слайда.

Для вертикального направления задайте высоту viewport в CSS, чтобы слайдер мог рассчитать число видимых рядов.

fixedWidthnumber | string—

Фиксированная ширина слайда (px или CSS, например '12rem', '30%'). Для горизонтального направления: число видимых слайдов считается по ширине контейнера, опция perPage перезаписывается при каждом пересчёте и не задаёт ширину слайда. Для вертикального направления задаёт только ширину слайда (высота — как без этой опции).

const slider = new Tvist('.slider', { fixedWidth: '12rem', gap: 16 })

Пример фиксированных размеров.

flickMaxPagesnumber1

Максимальное количество слайдов для короткого flick в обычном режиме. Длинное перетаскивание может пройти больше слайдов.

flickPowernumber600

Сила инерции (flick power). Множитель скорости при расчёте дистанции momentum scroll и snap после drag в обычном режиме (drag: true)

focusableElementsstring'input, textarea, select, [tabindex]'

CSS селектор для элементов, которые должны сохранять фокус при перетаскивании

freeSnapbooleanfalse

Привязка к слайдам в free режиме. Если true, после momentum scroll будет snap к ближайшему слайду

gapnumber | string0

Расстояние между слайдами: число (px) или CSS-строка (например '1rem', '12px'). Строковые значения измеряются в DOM относительно трека слайдера.

grid{ rows?: number; cols?: number; gap?: { row?: number | string; col?: number | string; } | number | string; dimensions?: [ number, number ][]; }undefined

Сетка слайдов

const slider = new Tvist('.slider', {
  grid: { rows: 2, cols: 3, gap: { row: 12, col: 16 } },
})

Размеры dimensions задаются парами [colSpan, rowSpan]. Примеры сетки.

Вложенные настройки →

holdToPauseboolean | HoldToPauseOptionsundefined

Удержание для сценариев историй:

  • false / undefined — выключено (по умолчанию)
  • true — включено с дефолтными настройками
  • HoldToPauseOptions — полный контроль

Удержание приостанавливает autoplay и при настройке video.pauseOnHold — видео. Помимо событий экземпляра на слайде отправляются DOM-события из TVIST_DOM_EVENTS с detail: { index, pointerType }, без всплытия.

Пример историй.

Вложенные настройки →

isNavigationbooleanfalse

Если true, слайдер будет вести себя как навигация (клики по слайдам делают их активными). Используется для создания thumbnail-слайдеров

keyboardboolean | { enabled?: boolean; onlyInViewport?: boolean; }false

Настройки управления с клавиатуры; в текущей версии обработчики не реализованы.

Вложенные настройки →

lazyboolean | { preloadPrevNext?: number; }false

Ленивая загрузка изображений

Используйте data-src и data-srcset, чтобы загрузкой управлял модуль. Для стандартного loading="lazy" используйте nativeLazyAdjacent.

Пример lazy loading.

Вложенные настройки →

loopboolean | 'auto' | LoopOptionsfalse

Бесконечная прокрутка. ‘auto’ - определяется автоматически на основе количества слайдов.

Поддерживаются следующие варианты:

  • false — выключено (по умолчанию)
  • true — включено (эквивалентно { enabled: true, withClones: false })
  • 'auto' — режим автоопределения (как и раньше)
  • LoopOptions — объект с расширенной конфигурацией

В обычном loop слайды переставляются в DOM. При withClones: true создаются клоны; для логического индекса используйте realIndex, для числа оригиналов — originalSlideCount.

const slider = new Tvist('.slider', {
  loop: { enabled: true, withClones: true },
})

Варианты loop.

Вложенные настройки →

marqueeboolean | { speed?: number; direction?: 'left' | 'right' | 'up' | 'down'; pauseOnHover?: boolean; }false

Режим бегущей строки (непрерывная прокрутка)

Автоматически включает loop. При объектной форме пауза при наведении включается явно.

const slider = new Tvist('.slider', {
  marquee: { speed: 50, direction: 'left', pauseOnHover: true },
})

Пример бегущей строки.

Вложенные настройки →

nativeLazyAdjacentboolean | NativeLazyAdjacentOptionsfalse (выключено)

Предзагрузка изображений с нативным loading="lazy" у соседних слайдов и/или целевого при переходе. Полезно для effect: 'cube', когда соседняя грань видна до подгрузки браузером. true — по умолчанию только при начале перехода; соседи при init — onInit: true.

В отличие от lazy, работает с обычными <img src="…" loading="lazy">: переводит подходящие изображения в eager. Это помогает избежать пустой соседней грани во время cube-перехода.

Значение Когда подгружает
false / не задано Не изменяет нативную загрузку
true / {} Целевой слайд при начале перехода, включая speed: 0
{ onInit: true } Дополнительно соседей активного слайда после инициализации
{ onInit: true, onTransitionStart: false } Только соседей после инициализации

Для ручной подгрузки экспортируется утилита forceEagerLoadingForLazyImages: import { forceEagerLoadingForLazyImages } from 'tvist'. Она переводит изображения с loading="lazy" внутри переданного элемента в eager.

Вложенные настройки →

navThrottleMsnumber0

Минимальный интервал (мс) между вызовами next()/prev(). В loop повторные шаги в том же направлении игнорируются до завершения перехода. Полезно при speed: 0 или при серии программных вызовов.

onobject—

Обработчики событий слайдера

const slider = new Tvist('.slider', {
  on: { slideChangeEnd: index => console.log(index) },
})

Имена событий и аргументы перечислены в таблице событий.

paginationboolean | { container?: string | HTMLElement; type?: 'bullets' | 'fraction' | 'progress' | 'custom'; clickable?: boolean; bulletClass?: string; bulletActiveClass?: string; renderBullet?: (index: number, className: string) => string; renderFraction?: (current: number, total: number) => string; renderCustom?: (current: number, total: number) => string; hideWhenSinglePage?: boolean; limit?: number; strategy?: 'even' | 'center'; remainderStrategy?: 'left' | 'center' | 'right'; }false

Пагинация. true — буллеты в стандартном контейнере внутри root (создаётся, если отсутствует), объект — кастомная настройка. Созданный контейнер удаляется при отключении опции или destroy().

Внешний контейнер можно передать селектором или элементом.

const slider = new Tvist('.slider', {
  pagination: { type: 'bullets', limit: 5, strategy: 'even' },
})

Все варианты пагинации.

Вложенные настройки →

peeknumber | string | { left?: number | string; right?: number | string; } | { top?: number | string; bottom?: number | string; }undefined

Peek — отступы, показывающие часть соседних слайдов (чтобы было видно, что есть ещё слайды). Для горизонтального слайдера: left/right, для вертикального: top/bottom.

peek: 10
peek: '1rem'
peek: { left: 10, right: 20 }
peek: { top: 10, bottom: 20 }

Числа задаются в пикселях, строки — в CSS-единицах. Для горизонтального слайдера используйте left/right, для вертикального — top/bottom.

Живые примеры peek.

Вложенные настройки →

peekTrimbooleantrue

Peek trim: при true (по умолчанию) концовка прижимается к краю — последний слайд без дыры справа/снизу. При включённом loop не применяется.

perPagenumber1

Количество слайдов на странице (видимых одновременно).

При autoWidth, autoHeight, fixedWidth или fixedHeight количество видимых слайдов определяется геометрией. Не задавайте дробное значение для сетки.

const slider = new Tvist('.slider', { perPage: 3, gap: 20 })
preventClicksbooleantrue

Предотвращать клики по слайдам во время перетаскивания

preventClicksPropagationbooleantrue

Предотвращать распространение событий клика во время анимации

rewindbooleanfalse

Автоматически возвращаться к первому слайду после достижения последнего (работает без loop) Применяется к навигации, autoplay и другим способам перехода между слайдами

Используется без loop. Для возврата перетаскиванием дополнительно включите rewindByDrag.

rewindByDragbooleanfalse

Разрешить перемотку карусели перетаскиванием, если включён rewind.

roundLengthsbooleantrue

Округлять translate и размеры до целых пикселей при применении в DOM. Помогает убрать субпиксельные щели/мыло на некоторых DPR и браузерах. Аналогично roundLengths в Swiper.

rubberbandbooleantrue

Эффект “резинки” при перетаскивании за границы

scrollbarboolean | { container?: string | HTMLElement; hide?: boolean; hideDelay?: number; scrollbarClass?: string; trackClass?: string; thumbClass?: string; draggable?: boolean; }false

Кастомный скроллбар для навигации

Вложенные настройки →

slideMinSizenumberundefined

Минимальный размер слайда (ширина или высота) для автоматического расчета perPage

slidesPerGroupnumber1

Количество слайдов, пролистываемых за один раз.

Задаёт шаг next() и prev(). Прямой переход scrollTo(index) использует указанный индекс.

speednumber300

Скорость анимации перехода в миллисекундах

startnumber0

Индекс начального слайда

syncOnDragbooleantrue

Синхронизировать ли слайдеры при перетаскивании (drag). Если false, то при перетаскивании одного слайдера другой не будет переключаться, синхронизация сработает только при клике или переключении стрелками.

thumbs{ slider: Tvist; }—

Связь с thumbnail-слайдером

Вложенные настройки →

videoboolean | VideoOptionsfalse

Управление видео внутри слайдов (HTML <video> и iframe YouTube/Vimeo).

  • false — выключено (по умолчанию)
  • true — включено с дефолтными настройками
  • VideoOptions — полный контроль

Поддерживаются HTML <video> и iframe YouTube/Vimeo. Автовоспроизведение зависит от политики браузера; для HTML-video обычно нужен выключенный звук.

const slider = new Tvist('.slider', {
  video: { autoplay: true, muted: true },
  autoplay: { waitForVideo: true },
})

Примеры видео.

Вложенные настройки →

visibilityboolean | VisibilityOptionstrue

Отслеживание видимости слайдера для приостановки autoplay/marquee.

  • false — выключено
  • true — включено с дефолтными настройками (по умолчанию)
  • VisibilityOptions — полный контроль

Вложенные настройки →

wheelboolean | { sensitivity?: number; releaseOnEdges?: boolean; }false

Управление колёсиком мыши

Вложенные настройки →

Методы

МетодВозвращаетОписание
next(): thisthis

Следующий слайд (или страница при perPage > 1)

if (slider.canScrollNext) slider.next()
prev(): thisthis

Предыдущий слайд (или страница при perPage > 1)

if (slider.canScrollPrev) slider.prev()
scrollTo(index: number, instant?: boolean): thisthis

Переход к слайду по индексу

Индекс логический (realIndex), начиная с нуля. instant: true отключает анимацию перехода.

slider.scrollTo(2)
slider.scrollTo(0, true)
update(): thisthis

Обновить размеры и пересчитать позиции

Вызывайте после изменения содержимого или DOM-структуры слайдов. Изменение размеров контейнера отслеживается автоматически.

slider.container.appendChild(newSlide)
slider.update()
updateOptions(newOptions: Partial<TvistOptions>): thisthis

Обновить опции слайдера динамически (без пересоздания)

Передавайте только изменённые параметры. Вложенный объект опции заменяется целиком; для сохранения его полей передайте их снова. Исключение — поля browserFixes, которые объединяются с текущими. После обновления вызывается optionsUpdated.

slider.updateOptions({ perPage: 4, gap: 30 })
slider.updateOptions({ autoplay: { delay: 5000, pauseOnHover: true } })

Живой пример обновления опций.

disable(): thisthis

Отключить слайдер (превратить в статичный контент) Убирает transform, отключает модули, но сохраняет экземпляр

slider.disable()
enable(): thisthis

Включить слайдер (восстановить функциональность)

slider.enable()
destroy(options?: TvistDestroyOptions): thisthis

Уничтожить экземпляр и очистить ресурсы. Вложенные Tvist по умолчанию не уничтожаются — задайте { destroyNested: true }, если нужно снести всё поддерево. Повторный вызов безопасен (no-op).

Отписывается от событий, уничтожает модули и очищает созданные элементы управления. По умолчанию вложенные слайдеры продолжают работать.

slider.destroy({ destroyNested: true })
on(event: string, handler: (...args: any[]) => void): thisthis

Подписаться на событие

const handler = index => console.log(index)
slider.on('slideChangeEnd', handler)

При поздней подписке некоторые события инициализации воспроизводят последние аргументы: created, refresh, setTranslate, progress, navigation:mounted, pagination:mounted, breakpoint. Для lock/unlock воспроизводится текущее состояние.

off(event: string, handler?: (...args: any[]) => void): thisthis

Отписаться от события

Без второго аргумента снимает все обработчики указанного события.

slider.off('slideChangeEnd', handler)
slider.off('slideChangeEnd')
emit(event: string, ...args: any[]): thisthis

Вызвать событие

slider.emit('customEvent', { source: 'button' })
once(event: string, handler: (...args: any[]) => void): thisthis

Подписаться на событие один раз

slider.once('slideChangeEnd', index => console.log(index))

Если для события доступно сохранённое состояние инициализации, обработчик выполняется сразу один раз.

sync(target: Tvist): thisthis

Синхронизация с другим экземпляром Tvist

Для двусторонней связи вызовите метод на обоих экземплярах. Настройка syncOnDrag управляет синхронизацией при перетаскивании.

main.sync(thumbs)
thumbs.sync(main)

Свойства

СвойствоТипОписание
idstringТолько чтение

Уникальный идентификатор экземпляра.

rootHTMLElementТолько чтение

Корневой элемент слайдера.

На root выставляются классы из Tvist.CLASSES:

Класс Состояние
created Добавлен до события created; снимается при уничтожении
destroyed Добавлен после beforeDestroy; остаётся после уничтожения
locked Контент помещается в viewport; прокрутка не требуется
slider.root.classList.contains(Tvist.CLASSES.locked)
trackHTMLElementТолько чтение

Элемент viewport, обрезающий видимую область.

containerHTMLElementТолько чтение

Контейнер слайдов, к которому применяется transform.

optionsTvistOptionsТолько чтение

Текущая конфигурация. Для изменения используйте updateOptions().

Ссылка только для чтения; для изменения конфигурации используйте updateOptions().

isEnabledbooleanТолько чтение

Проверить, включен ли слайдер

slidesHTMLElement[]Только чтение

Получить список слайдов

Порядок соответствует текущему DOM; loop может его менять. Для стилей определённого слайда используйте data-tvist-slide-index, а не :nth-child().

originalSlideCountnumberТолько чтение

Количество оригинальных слайдов (без клонов). В режиме loop.withClones не учитывает клонированные слайды по краям.

slideCountnumberТолько чтение

Общее количество слайдов в DOM (включая клоны). В режиме loop.withClones включает клонированные слайды по краям. Совпадает с originalSlideCount если loop.withClones не используется.

activeIndexnumberТолько чтение

Получить текущий индекс активного слайда

Индекс в текущем DOM. Для логического индекса исходного слайда при loop используйте realIndex.

realIndexnumberТолько чтение

Получить текущий логический индекс слайда (с учётом loop)

slider.on('slideChangeEnd', () => console.log(slider.realIndex))
canScrollNextbooleanТолько чтение

Проверить, можно ли листать вперёд

canScrollPrevbooleanТолько чтение

Проверить, можно ли листать назад

autoplayAutoplayControls | undefinedТолько чтение

Получить публичное API autoplay модуля

Доступно при активном модуле autoplay. Методы управления.

videoVideoControls | undefinedТолько чтение

Получить публичное API video модуля

Доступно при активном модуле video. Методы управления.

marqueeMarqueeControls | undefinedТолько чтение

Continuous motion controls, when enabled.

slider.marquee возвращает управление непрерывной прокруткой: start/stop, pause/resume, проверки состояния, setSpeed/getSpeed и setDirection/getDirection. Если marquee отключён, возвращается undefined.

lazyloadLazyloadControls | undefinedТолько чтение

Explicit lazy image loading, when enabled.

slider.lazyload?.loadSlide(2) загружает изображения выбранного слайда, slider.lazyload?.loadAll() — всех слайдов. Если lazy отключён, возвращается undefined.

visibilityVisibilityControls | undefinedТолько чтение

Visibility controls, when enabled.

slider.visibility?.isVisible() возвращает состояние видимости; slider.visibility?.check() принудительно проверяет видимость. При отключённой опции возвращается undefined.

currentBreakpointnumber | nullТолько чтение

Matching breakpoint, or null when no breakpoint applies.

Номер активного брейкпоинта либо null, если совпадений нет.

root.tvistInstanceTvist | null | undefined

Ссылка на экземпляр Tvist на корневом DOM-элементе.

Позволяет получить экземпляр через DOM. После destroy() ссылка очищается; повторное создание на том же root корректно заменяет экземпляр.

const element = document.querySelector('.slider')
element?.tvistInstance?.next()

События

Передавайте обработчики в on или подписывайтесь через slider.on(). Аргументы зависят от события; экземпляр слайдера не добавляется автоматически.

СобытиеАргументыКогда вызывается
created(tvist: Tvist)

После создания слайдера

К этому моменту на root уже установлен Tvist.CLASSES.created.

slider.on('created', tvist => console.log(tvist.slides.length))
beforeDestroy(tvist: Tvist)

Перед уничтожением

Вызывается до очистки модулей и DOM, перед добавлением класса destroyed.

destroyed(tvist: Tvist)

При уничтожении

К этому моменту на root установлен Tvist.CLASSES.destroyed.

click(index: number, slide: HTMLElement, event: MouseEvent)

Клик по слайду

refresh()

Вызван update() — пересчитаны размеры/позиции

resized()

Завершилось изменение размера контейнера

beforeSlideChange(index: number)

Перед сменой слайда

slideChangeStart(index: number, data?: { isDrag?: boolean; })

Начало смены слайда (старт анимации)

data?.isDrag показывает, связан ли переход с drag. При loop индекс события учитывает логический исходный слайд.

slideChangeEnd(index: number, data?: { isDrag?: boolean; })

Смена слайда завершена (после анимации)

slider.on('slideChangeEnd', index => {
  counter.textContent = String(index + 1)
})
beforeTransitionStart(data: { index: number; direction: "next" | "prev"; })

Перед началом анимации перехода (для loop fix)

transitionStart(index: number)

Начало анимации перехода

transitionEnd(index: number)

Конец анимации перехода

visible(slide: HTMLElement, index: number)

Слайд вошёл в видимую область (по расчёту движка: пересечение с viewport; для effect cube — та же геометрия граней, что и у эффекта куба). За одну анимацию или кадр событие может прийти для нескольких слайдов (например perPage>1 или при кубе — до двух граней, пока идёт переход). Для логики «текущий слайд» используйте slideChangeEnd / activeIndex, а не этот колбэк. В обработчике опирайтесь на аргумент index, а не на activeIndex в момент вызова.

Во время одного перехода событие может прийти для нескольких слайдов. Ориентируйтесь на аргумент index; для текущего активного слайда используйте slideChangeEnd.

hidden(slide: HTMLElement, index: number)

Слайд вышел из видимой области (см. замечания к visible)

scroll()

Во время прокрутки (тики анимации / драг)

progress(progress: number)

Прогресс прокрутки 0…1, только при !loop

Вызывается только без loop; значение в диапазоне 0…1.

reachBeginning()

Достигнут первый слайд

reachEnd()

Достигнут последний слайд

dragStart()

Начало перетаскивания

drag()

Во время перетаскивания

dragEnd()

Конец перетаскивания

breakpoint(breakpoint: number | null)

Смена breakpoint

lock()

Слайдер заблокирован (контент помещается в область)

unlock()

Слайдер разблокирован

optionsUpdated(tvist: Tvist, newOptions: Partial<TvistOptions>)

Обновлены опции через updateOptions()

slider.on('optionsUpdated', (tvist, newOptions) => console.log(newOptions))
videoReady(data: VideoEvent)

Видео загрузило метаданные и готово к воспроизведению

videoPlay(data: VideoEvent)

Видео начало воспроизведение

videoPause(data: VideoEvent)

Видео поставлено на паузу

videoEnded(data: VideoEvent)

Видео завершило воспроизведение

videoProgress(data: VideoProgressEvent)

Прогресс воспроизведения видео (0…1)

autoplayProgress(data: AutoplayProgressEvent)

Прогресс активного сегмента (текущий слайд, 0…1)

segmentIndex и segmentProgress описывают активный сегмент; totalSegments — общее количество. Подходит для прогресса историй.

longPressStart(data: { index: number; pointerType: string; })

Начало long press удержания

Требуется включённый holdToPause. На слайде также отправляется DOM CustomEvent из TVIST_DOM_EVENTS без всплытия.

longPressEnd(data: { index: number; pointerType: string; })

Конец long press удержания

Отправляется при завершении или отмене удержания, включая начало drag.

sliderVisible()

Слайдер стал видимым

sliderHidden()

Слайдер скрыт

enabled(tvist: Tvist)

После вызова enable() и восстановления работы слайдера.

disabled(tvist: Tvist)

После вызова disable() и перехода к статичному контенту.

autoplayStart()

Автопрокрутка запущена.

autoplayStop()

Автопрокрутка остановлена.

autoplayPause()

Автопрокрутка поставлена на паузу.

autoplayResume()

Автопрокрутка продолжена после паузы.

marqueeStart()

Бегущая строка запущена.

marqueeStop()

Бегущая строка остановлена.

marqueePause()

Бегущая строка поставлена на паузу.

marqueeResume()

Бегущая строка продолжена после паузы.

navigation:mounted()

Кнопки навигации смонтированы.

pagination:mounted()

Пагинация смонтирована.

navigation:click(index: number)

Пользователь выбрал слайд в слайдере-миниатюрах.

setTranslate(tvist: Tvist, position: number)

Перед применением transform к контейнеру. Используется собственными эффектами.

beforeLoopFix()

Перед перестановкой слайдов для коррекции loop. Событие для расширений.

loopFix()

После коррекции loop. Событие для расширений.

lazyLoaded(img: HTMLImageElement, slideIndex: number)

Изображение с data-src успешно загружено модулем LazyLoad.

slider.on('lazyLoaded', (img, slideIndex) => {
  img.classList.add('loaded')
})
lazyLoadError(img: HTMLImageElement, slideIndex: number)

Загрузка изображения модулем LazyLoad завершилась ошибкой. Можно показать запасное изображение.

Статический API

МетодВозвращаетОписание
СвойствоТипОписание
VERSIONstringТолько чтение

Library version.

CLASSEStypeof TVIST_CLASSESТолько чтение

BEM class names.

CSS_PREFIX`tvist-v${number}`Только чтение

Устарело: Use Tvist.CLASSES.block.

Вложенные настройки

peek

ОпцияТипПо умолчаниюОписание
bottomnumber | string—
leftnumber | string—
rightnumber | string—
topnumber | string—

center

ОпцияТипПо умолчаниюОписание
activebooleanfalse

Центрирует активный слайд в viewport (аналог center: true).

focusbooleanfalse

Центрирует активный слайд, когда есть место; у краёв обрезает позицию (аналог Splide focus: 'center' + trimSpace: true).

justifybooleanfalse

Центрирует все слайды визуально когда locked (justify-content: center).

browserFixes

ОпцияТипПо умолчаниюОписание
firefoxImageDecodingbooleantrue

Firefox: добавлять атрибут decoding=“sync” к изображениям при предзагрузке. Предотвращает задержку отрисовки декодированных изображений в Firefox.

Модули

Настройки, управление и события встроенных модулей. Встроенные возможности и миграция API →

Стрелки

Опция: arrows.

ОпцияТипПо умолчаниюОписание
addIconsbooleantrue

Автоматически добавлять SVG иконки в кнопки навигации.

disabledClassstringTvist.CLASSES.arrowDisabled

CSS класс для неактивных стрелок.

hiddenClassstringTvist.CLASSES.arrowHidden

CSS класс для скрытых стрелок.

hideWhenSinglePagebooleantrue

Автоматически скрывать стрелки когда всего одна страница (нечего листать).

nextstring | HTMLElement—

Селектор или элемент для кнопки “вперёд”. Может быть вне root

prevstring | HTMLElement—

Селектор или элемент для кнопки “назад”. Может быть вне root — поиск по document

События: navigation:mounted.

Пагинация

Опция: pagination.

ОпцияТипПо умолчаниюОписание
bulletActiveClassstringTvist.CLASSES.bulletActive

CSS класс для активного буллета.

bulletClassstringTvist.CLASSES.bullet

CSS класс для буллета.

clickablebooleantrue

Включить клики по буллетам для навигации.

containerstring | HTMLElement—

Селектор или элемент контейнера для пагинации. Может быть вне root

hideWhenSinglePagebooleantrue

Автоматически скрывать пагинацию когда всего одна страница (нечего листать).

limitnumberundefined

Максимальное количество видимых точек (только для type: ‘bullets’) Если не указано - показываются все точки

remainderStrategy'left' | 'center' | 'right''center'

Стратегия распределения остатка при равномерном делении (только для strategy: ‘even’)

  • ‘left’: остаток добавляется к левым точкам
  • ‘center’: остаток добавляется к центральным точкам
  • ‘right’: остаток добавляется к правым точкам
renderBullet(index: number, className: string) => string—

Функция рендеринга буллета

Возвращаемый HTML должен содержать переданный className. Индекс начинается с нуля.

const slider = new Tvist('.slider', {
  pagination: {
    renderBullet: (index, className) =>
      `<button class="${className}">${index + 1}</button>`,
  },
})
renderCustom(current: number, total: number) => string—

Функция рендеринга кастомной пагинации

renderFraction(current: number, total: number) => string—

Функция рендеринга дробной пагинации

strategy'even' | 'center''even'

Стратегия распределения слайдов по точкам при использовании limit

  • ‘even’: равномерное распределение - каждая точка представляет равное количество слайдов
  • ‘center’: центральное распределение - крайние точки по 1 слайду, остальные группируются в центре
type'bullets' | 'fraction' | 'progress' | 'custom''bullets'

Тип пагинации.

События: pagination:mounted, autoplayProgress.

Перетаскивание и удержание

Настройки drag, dragSpeed, rubberband, freeSnap, flickPower и flickMaxPages находятся в общей таблице. Ниже — настройки долгого удержания.

Опция: holdToPause.

ОпцияТипПо умолчаниюОписание
cancelOnDragbooleantrue

Отменять удержание при старте drag

enabledbooleantrue

Включить long press удержание

excludestringundefined

CSS-селектор элементов, которые нужно исключить из удержания

moveThresholdnumberundefined

Порог движения до отмены удержания (px). Если не задан, используется внутренний порог drag.

root'slider' | 'container' | HTMLElement'slider'

Область, в которой отслеживается удержание:

  • ‘slider’ — root слайдера
  • ‘container’ — внутренний контейнер со слайдами
  • HTMLElement — кастомный элемент
thresholdnumber100

Порог удержания в миллисекундах. Дефолт при отсутствии поля — HOLD_TO_PAUSE_DEFAULT_THRESHOLD_MS из core/constants.

События: dragStart, drag, dragEnd, longPressStart, longPressEnd.

Автопрокрутка

Методы вызываются через slider.autoplay?.pause() и другие методы этого свойства. При паузе сохраняется оставшееся время, а start() запускает цикл заново.

Опция: autoplay.

ОпцияТипПо умолчаниюОписание
delaynumber3000

Задержка между переходами в миллисекундах

disableOnInteractionbooleanfalse

Отключить автопрокрутку после первого взаимодействия пользователя

pauseOnFocusbooleantrue

Ставить автопрокрутку на паузу, пока фокус находится внутри слайдера

pauseOnHoverbooleantrue

Ставить автопрокрутку на паузу при наведении курсора

pauseOnInteractionbooleantrue

Ставить автопрокрутку на паузу при любом взаимодействии (drag, click)

waitForVideobooleanfalse

Для видео-слайдов: ждать окончания видео вместо таймера. Для слайдов без видео используется обычный delay.

МетодВозвращаетОписание
autoplay.start(): voidvoid

Запустить прокрутку.

autoplay.stop(): voidvoid

Остановить прокрутку.

autoplay.pause(): voidvoid

Приостановить прокрутку.

autoplay.resume(): voidvoid

Продолжить после паузы.

autoplay.isRunning(): booleanboolean

Проверить, запущена ли прокрутка.

autoplay.isPaused(): booleanboolean

Проверить состояние паузы.

autoplay.isStopped(): booleanboolean

Проверить, остановлена ли прокрутка.

События: autoplayStart, autoplayStop, autoplayPause, autoplayResume, autoplayProgress.

Видео

Методы вызываются через slider.video?.play(). Аргумент index необязателен; без него используется активный слайд.

Опция: video.

ОпцияТипПо умолчаниюОписание
autoplaybooleantrue

Воспроизводить видео при активации слайда

loopbooleanfalse

Зациклить воспроизведение видео

mutedbooleantrue

Начинать видео с выключенным звуком (обязательно для autoplay в браузерах)

pauseOnHoldbooleantrue (если включен holdToPause), иначе false

Ставить активное видео на паузу во время long press и продолжать после отпускания

pauseOnLeavebooleantrue

Ставить видео на паузу при уходе со слайда

playsinlinebooleantrue

Добавить атрибут playsinline для iOS (без этого видео открывается на весь экран)

resetOnLeavebooleanfalse

Сбрасывать видео на начало при уходе со слайда

МетодВозвращаетОписание
video.play(index?: number): voidvoid

Воспроизвести видео выбранного или активного слайда.

video.pause(index?: number): voidvoid

Поставить видео выбранного или активного слайда на паузу.

video.mute(): voidvoid

Выключить звук всех видео.

video.unmute(): voidvoid

Включить звук всех видео.

video.isMuted(): booleanboolean

Проверить, выключен ли звук.

События: videoReady, videoPlay, videoPause, videoEnded, videoProgress.

Видимость

Управление видимостью доступно через slider.visibility. Используйте события sliderVisible и sliderHidden, чтобы реагировать на изменения.

Опция: visibility.

ОпцияТипПо умолчаниюОписание
pauseAutoplaybooleantrue

Приостанавливать autoplay когда слайдер скрыт

pauseMarqueebooleantrue

Приостанавливать marquee когда слайдер скрыт

thresholdnumber0

Порог видимости для IntersectionObserver (0…1) 0 = считается видимым если хоть что-то видно 1 = считается видимым только если виден полностью

МетодВозвращаетОписание
visibility.isVisible(): booleanboolean
visibility.check(): voidvoid

События: sliderVisible, sliderHidden.

Бесконечная прокрутка

Опция: loop.

ОпцияТипПо умолчаниюОписание
enabledbooleantrue

Включить/выключить loop. По умолчанию true, если указан объект.

withClonesbooleanfalse

Включить систему DOM-клонов для loop. По умолчанию false.

В режиме клонов индексы и события должны трактоваться так, как будто пользователь взаимодействует с оригинальными слайдами.

События: beforeLoopFix, loopFix.

Бегущая строка

const marquee = slider.marquee
marquee?.pause()
marquee?.resume()

Тип интерфейса управления выводится из slider.marquee.

Опция: marquee.

ОпцияТипПо умолчаниюОписание
direction'left' | 'right' | 'up' | 'down''left' для horizontal, 'up' для vertical

Направление прокрутки.

pauseOnHoverbooleantrue для marquee: true; undefined для объекта

Пауза при наведении.

speednumber50

Скорость прокрутки в пикселях в секунду.

МетодВозвращаетОписание
marquee.start(): voidvoid

Запустить прокрутку.

marquee.stop(): voidvoid

Остановить прокрутку.

marquee.pause(): voidvoid

Приостановить прокрутку.

marquee.resume(): voidvoid

Продолжить после паузы.

marquee.isRunning(): booleanboolean

Проверить, запущена ли прокрутка.

marquee.isPaused(): booleanboolean

Проверить состояние паузы.

marquee.isStopped(): booleanboolean

Проверить, остановлена ли прокрутка.

marquee.setSpeed(speed: number): voidvoid

Установить скорость в пикселях в секунду.

marquee.getSpeed(): numbernumber
marquee.setDirection(direction: "left" | "right" | "up" | "down"): voidvoid
marquee.getDirection(): "left" | "right" | "up" | "down""left" | "right" | "up" | "down"

События: marqueeStart, marqueeStop, marqueePause, marqueeResume.

Эффекты

Задайте effect: 'fade' или effect: 'cube'. Для cube viewport должен иметь размеры. Некоторые объявленные настройки эффектов пока не используются — это отмечено в описаниях полей.

Fade · Cube.

Опция: fadeEffect.

ОпцияТипПо умолчаниюОписание
crossFadeboolean—

Настройка кросс-фейда; в текущей реализации fade не используется.

Опция: cubeEffect.

ОпцияТипПо умолчаниюОписание
perspectivenumber800

Расстояние перспективы (px). Меньше = сильнее эффект глубины.

perspectiveOriginYnumber60

Точка перспективы по Y (%).

shadowboolean—

Общая тень куба; в текущей реализации не используется.

shadowOffsetnumber—

Смещение общей тени; в текущей реализации не используется.

shadowScalenumber—

Масштаб общей тени; в текущей реализации не используется.

slideShadowsbooleantrue

Тени на гранях куба.

viewportPaddingnumber10

Внутренний отступ для предотвращения обрезки вращающихся граней (px).

События: setTranslate.

Сетка

Опция: grid.

ОпцияТипПо умолчаниюОписание
colsnumber1 при заданном rows

Количество колонок. Если задан только rows, по умолчанию 1.

dimensions[ number, number ][]—

Размеры ячеек для каждого слайда [colSpan, rowSpan] Массив повторяется, если слайдов больше, чем определений

[[2, 1], [1, 2]]
gap{ row?: number | string; col?: number | string; } | number | stringgap

Отступы сетки. Можно задать отдельно для строк и колонок. Если не задано, используется глобальный gap.

Вложенные настройки →

rowsnumber1 при заданном cols

Количество рядов. Если задан только cols, по умолчанию 1 (как splide-extension-grid: rows 1, cols 1).

grid.gap

ОпцияТипПо умолчаниюОписание
colnumber | stringgap

Отступ между колонками.

rownumber | stringgap

Отступ между рядами.

Миниатюры

const thumbs = new Tvist('.thumbs', { perPage: 4, isNavigation: true })
const main = new Tvist('.main', { thumbs: { slider: thumbs } })

Пример миниатюр.

Опция: thumbs.

ОпцияТипПо умолчаниюОписание
sliderTvist—

Экземпляр слайдера-миниатюр

События: navigation:click.

Загрузка изображений

const lazy = slider.lazyload
lazy?.loadSlide(2)
lazy?.loadAll()

Используйте slider.lazyload без импорта внутренних компонентов.

Опция: lazy.

ОпцияТипПо умолчаниюОписание
preloadPrevNextnumber1

Количество соседних слайдов для предзагрузки с каждой стороны.

Опция: nativeLazyAdjacent.

ОпцияТипПо умолчаниюОписание
onInitbooleanfalse (включите явно `onInit: true`)

После инициализации слайдера — для слайдов prev/next относительно активного. Дополнительный трафик при загрузке страницы; по умолчанию выключено.

onTransitionStartbooleantrue при включённой опции (`true` или объект без `onTransitionStart: false`)

В начале перехода к другому слайду (событие beforeSlideChange), до анимации; то же при speed: 0.

МетодВозвращаетОписание
lazyload.loadAll(): voidvoid
lazyload.loadSlide(index: number): voidvoid

События: lazyLoaded, lazyLoadError.

Колёсико и клавиатура

Модуль использует wheel. Настройки keyboard присутствуют в типах, но обработчики клавиатуры в текущей версии не реализованы.

Пример управления колёсиком.

Опция: wheel.

ОпцияТипПо умолчаниюОписание
releaseOnEdgesbooleantrue

Разрешить прокрутку страницы на краях слайдера.

sensitivitynumber1

Чувствительность (количество пикселей на тик колёсика).

Опция: keyboard.

ОпцияТипПо умолчаниюОписание
enabledboolean—

Включить управление с клавиатуры

onlyInViewportboolean—

Реагировать только когда слайдер в видимой области

Скроллбар

const slider = new Tvist('.slider', {
  scrollbar: { draggable: true, hide: true, hideDelay: 1000 },
})

Примеры скроллбара.

Опция: scrollbar.

ОпцияТипПо умолчаниюОписание
containerstring | HTMLElement—

Селектор или элемент для контейнера скроллбара

draggablebooleantrue

Возможность перетаскивания ползунка.

hidebooleanfalse

Автоматически скрывать скроллбар при бездействии.

hideDelaynumber1000

Задержка перед скрытием (мс).

scrollbarClassstringTvist.CLASSES.scrollbar

CSS класс для скроллбара.

thumbClassstringTvist.CLASSES.scrollbarThumb

CSS класс для ползунка.

trackClassstringTvist.CLASSES.scrollbarTrack

CSS класс для трека скроллбара.

Адаптивность

Текущий breakpoint доступен в slider.currentBreakpoint; без совпадения возвращается null.

Подробное руководство.

Опция: breakpoints.

События: breakpoint.

Состояния слайдов

Выставляет классы активного и видимого слайда, а также состояния root. Для нестандартного оформления используйте Tvist.CLASSES.

События: visible, hidden, lock, unlock.

Типы

Использование TypeScript →

TvistLongPressDomEventDetail

detail для DOM CustomEvent long press на слайде (имена в TVIST_DOM_EVENTS)

ПолеТипОписание
indexnumber
pointerTypestring

TvistDestroyOptions

Аргументы метода Tvist.destroy.

ПолеТипОписание
destroyNestedboolean

Уничтожать вложенные экземпляры Tvist (потомки с классом блока). Рекурсивно: у каждого вложенного вызывается destroy({ destroyNested: true }). По умолчанию false — вложенные слайдеры (например галереи в карточках) остаются активными.

По умолчанию: false.

AutoplayControls

API модуля autoplay для публичного геттера

ПолеТипОписание

MarqueeControls

API модуля marquee для публичного геттера

ПолеТипОписание

VideoControls

API модуля video для публичного геттера

ПолеТипОписание

AutoplayOptions

Опции автопрокрутки (объект)

ПолеТипОписание
delaynumber

Задержка между переходами в миллисекундах

По умолчанию: 3000.

pauseOnHoverboolean

Ставить автопрокрутку на паузу при наведении курсора

По умолчанию: true.

pauseOnFocusboolean

Ставить автопрокрутку на паузу, пока фокус находится внутри слайдера

По умолчанию: true.

pauseOnInteractionboolean

Ставить автопрокрутку на паузу при любом взаимодействии (drag, click)

По умолчанию: true.

disableOnInteractionboolean

Отключить автопрокрутку после первого взаимодействия пользователя

По умолчанию: false.

waitForVideoboolean

Для видео-слайдов: ждать окончания видео вместо таймера. Для слайдов без видео используется обычный delay.

По умолчанию: false.

VideoOptions

Опции видео модуля

ПолеТипОписание
autoplayboolean

Воспроизводить видео при активации слайда

По умолчанию: true.

mutedboolean

Начинать видео с выключенным звуком (обязательно для autoplay в браузерах)

По умолчанию: true.

loopboolean

Зациклить воспроизведение видео

По умолчанию: false.

playsinlineboolean

Добавить атрибут playsinline для iOS (без этого видео открывается на весь экран)

По умолчанию: true.

pauseOnLeaveboolean

Ставить видео на паузу при уходе со слайда

По умолчанию: true.

resetOnLeaveboolean

Сбрасывать видео на начало при уходе со слайда

По умолчанию: false.

pauseOnHoldboolean

Ставить активное видео на паузу во время long press и продолжать после отпускания

По умолчанию: true (если включен holdToPause), иначе false.

HoldToPauseOptions

Опции удержания для сценариев историй (long press)

ПолеТипОписание
enabledboolean

Включить long press удержание

По умолчанию: true.

thresholdnumber

Порог удержания в миллисекундах. Дефолт при отсутствии поля — HOLD_TO_PAUSE_DEFAULT_THRESHOLD_MS из core/constants.

По умолчанию: 100.

root'slider' | 'container' | HTMLElement

Область, в которой отслеживается удержание:

  • ‘slider’ — root слайдера
  • ‘container’ — внутренний контейнер со слайдами
  • HTMLElement — кастомный элемент

По умолчанию: 'slider'.

excludestring

CSS-селектор элементов, которые нужно исключить из удержания

По умолчанию: undefined.

cancelOnDragboolean

Отменять удержание при старте drag

По умолчанию: true.

moveThresholdnumber

Порог движения до отмены удержания (px). Если не задан, используется внутренний порог drag.

По умолчанию: undefined.

VisibilityOptions

Опции модуля отслеживания видимости

ПолеТипОписание
pauseAutoplayboolean

Приостанавливать autoplay когда слайдер скрыт

По умолчанию: true.

pauseMarqueeboolean

Приостанавливать marquee когда слайдер скрыт

По умолчанию: true.

thresholdnumber

Порог видимости для IntersectionObserver (0…1) 0 = считается видимым если хоть что-то видно 1 = считается видимым только если виден полностью

По умолчанию: 0.

BrowserFixesOptions

Опции для специфичных браузерных фиксов

ПолеТипОписание
firefoxImageDecodingboolean

Firefox: добавлять атрибут decoding=“sync” к изображениям при предзагрузке. Предотвращает задержку отрисовки декодированных изображений в Firefox.

По умолчанию: true.

VideoProgressEvent

Payload события videoProgress

ПолеТипОписание
slideHTMLElement

DOM-элемент слайда

videoHTMLVideoElement

DOM-элемент видео

indexnumber

Индекс слайда

progressnumber

Прогресс воспроизведения (0…1)

currentTimenumber

Текущее время воспроизведения в секундах

durationnumber

Полная длительность видео в секундах

AutoplayProgressEvent

Payload события autoplayProgress

ПолеТипОписание
progressnumber

Прогресс активного сегмента (0…1)

indexnumber

Индекс активного слайда

segmentIndexnumber

Индекс активного сегмента (равен index)

segmentProgressnumber

Прогресс активного сегмента (0…1), алиас progress

totalSegmentsnumber

Общее количество сегментов (слайдов)

VideoEvent

Payload событий video (play, pause, ended, ready)

ПолеТипОписание
slideHTMLElement

DOM-элемент слайда

videoHTMLVideoElement

DOM-элемент видео

indexnumber

Индекс слайда

NativeLazyAdjacentOptions

Принудительная подгрузка img с нативным loading=“lazy” для соседних и целевого слайда.

ПолеТипОписание
onInitboolean

После инициализации слайдера — для слайдов prev/next относительно активного. Дополнительный трафик при загрузке страницы; по умолчанию выключено.

По умолчанию: false (включите явно `onInit: true`).

onTransitionStartboolean

В начале перехода к другому слайду (событие beforeSlideChange), до анимации; то же при speed: 0.

По умолчанию: true при включённой опции (`true` или объект без `onTransitionStart: false`).

LoopOptions

Расширенные опции бесконечной прокрутки.

ПолеТипОписание
enabledboolean

Включить/выключить loop. По умолчанию true, если указан объект.

По умолчанию: true.

withClonesboolean

Включить систему DOM-клонов для loop. По умолчанию false.

В режиме клонов индексы и события должны трактоваться так, как будто пользователь взаимодействует с оригинальными слайдами.

По умолчанию: false.

CenterOptions

Расширенные настройки центрирования слайдов.

ПолеТипОписание
activeboolean

Центрирует активный слайд в viewport (аналог center: true).

По умолчанию: false.

focusboolean

Центрирует активный слайд, когда есть место; у краёв обрезает позицию (аналог Splide focus: 'center' + trimSpace: true).

По умолчанию: false.

justifyboolean

Центрирует все слайды визуально когда locked (justify-content: center).

По умолчанию: false.

LazyloadControls

Explicit image loading controls, available when lazy is enabled.

ПолеТипОписание

VisibilityControls

Visibility controls, available when visibility is enabled.

ПолеТипОписание