Карусель
Компонент слайд-шоу для циклического повторения элементов - карусель из изображений или текстовых слайдов.
Как это работает
«Карусель» - это слайд-шоу для отображения серии содержимого, созданная на основе CSS 3D-трансформаций и немного на JS. Она работает с текстом, изображениями или обычной разметкой. Она также поддерживает кнопки “next/prev”.
В браузерах с поддержкой API видимости страниц элементы карусели не будут сменяться, когда страница невидима пользователю (например, когда вкладка браузера неактивна, или окно браузера «минимизировано» - кнопка «квадратик» слева от крестика «закрыть браузер», и т.д.).
Эффект анимации этого компонента зависит от медиа запроса prefers-reduced-motion
. Смотрите раздел о редукции анимаций.
Имейте в виду, что вложенные карусели не поддерживаются, а карусели обычно не соответствуют стандартам доступности.
И, наконец, если Вы создаете наш JavaScript из исходного кода, он требует util.js
.
Пример
Карусель не подстраивает автоматически размер содержимого слайдов. Поэтому вам могут понадобиться дополнительные утилиты для придания их содержимому нужного размера. Пока карусели поддерживают кнопки «prev/next», их не надо добавлять явно. Добавьте и настраивайте их самостоятельно.
Класс .active
добавляют к одному из слайдов, иначе карусель не будет видно. Также для внедрения элементов управления необходимо задать уникальный ID элементу класса .carousel
, особенно если у вас много каруселей на одной странице. Элементы управления и индикаторы должны иметь атрибут data-target
(или href
для <a>
), который совпадает с ID элемента класса .carousel
.
Только слайды
Вот пример карусели, где есть только слайды. Заметьте присутствие классов .d-block
и .w-100
, отменяющих дефолтное выравнивание изображений в браузерах у изображений карусели.
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
</div>
С элементами управления
Добавляет кнопки prev/next:
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
С индикаторами
Вы также можете добавить индикаторы к карусели, наряду с органами управления.
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
Требуется начальный активный элемент
Необходимо добавлять класс .active
в один из слайдов, иначе карусель не будет видна.
С надписями
Добавляйте надписи в ваши слайды с помощью добавления элемента класса .carousel-caption
в любой элемент карусели класса .carousel-item
. Надписи легко скрыть на меньших устройствах, используя утилиты отображения. Они спрятаны первоначально с помощью класса .d-none
и показываем их опять на средних устройствах с помощью класса .d-md-block
.
<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleCaptions" data-slide-to="1"></li>
<li data-target="#carouselExampleCaptions" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Метка первого слайда</h5>
<p>Некоторый репрезентативный заполнитель для первого слайда.</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Метка второго слайда</h5>
<p>Некоторый репрезентативный заполнитель для второго слайда.</p>
</div>
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>Метка третьего слайда</h5>
<p>Некоторый репрезентативный заполнитель для третьего слайда.</p>
</div>
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>
</a>
<a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
Склейка
Добавьте .carousel-fade
в вашу карусель для анимации слайдов с постепенным переходом на следующий слайд.
<div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>gt;
</a>
<a class="carousel-control-next" href="#carouselExampleFade" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
Индивидуальный интервал .carousel-item
Добавьте data-interval=""
к элементу .carousel-item
, чтобы изменить время задержки между автоматическим циклическим переходом к следующему элементу.
<div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active" data-interval="10000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item" data-interval="2000">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Предыдущий</span>
</a>
<a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Следующий</span>
</a>
</div>
Отключение сенсорного смахивания
Карусели поддерживают смахивание влево/вправо на устройствах с сенсорным экраном для перемещения между слайдами. Эту возможность можно отключить с помощью атрибута касания данных data-touch
. Ниже в примере не включен атрибут data-ride
и он имеет data-interval="false"
, поэтому он не запускается автоматически.
<div id="carouselExampleControlsNoTouching" class="carousel slide" data-touch="false" data-interval="false">
<div class="carousel-inner">
<div class="carousel-item active">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
<div class="carousel-item">
<img src="..." class="d-block w-100" alt="...">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControlsNoTouching" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControlsNoTouching" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
Использование
Через атрибуты
Используйте атрибуты данных, чтобы легко контролировать положение карусели. data-slide
принимает ключевые слова prev
или next
, которые изменяют положение слайда относительно его текущего положения. В качестве альтернативы, используйте data-slide-to
, чтобы передать необработанный индекс слайда в карусель data-slide-to="2"
, который сдвигает положение слайда на конкретный индекс, начинающийся с 0
.
Атрибут data-ride="carousel"
используется для пометки карусели как анимированной, начиная с загрузки страницы. Если Вы не используете data-ride="carousel"
для инициализации карусели, Вам придется инициализировать ее самостоятельно. Его нельзя использовать в сочетании с (избыточной и ненужной) явной инициализацией JavaScript той же карусели.
Через JavaScript
Вызывайте карусель вручную:
$('.carousel').carousel()
Параметры
Параметры можно передавать через атрибуты или JavaScript. Для использования атрибутов добавьте название параметра в data-
, например: data-interval=""
.
Имя | Тип | По умолч. | Описание |
---|---|---|---|
interval | число | 5000 | Время задержки между автоматической сменой слайда. Если false – карусель не будет автоматически сменять слайды. |
keyboard | boolean | true | Будет ли карусель реагировать на события клавиатуры. |
pause | строка | boolean | "hover" |
Если стоит Устройства, активируемые касанием: |
ride | строка | false | Автосмена слайдов карусели после первой ручной смены слайда юзером. Если carousel – автосмена включается после загрузки. |
wrap | boolean | true | Должна ли карусель сменяться плавно или дискретно. |
touch | boolean | true | Карусель должна поддерживать взаимодействие влево / вправо на сенсорных устройствах. |
Методы
Асинхронные методы и переходы
Все методы API асинхронны и запускают переход. Они возвращаются функции, вызвавшей их, с началом перехода, но до его конца. Плюс, вызов метода к компоненту, выполняющему переход, будет проигнорирован.
.carousel(options)
Инициализирует объект object
карусели с установленными параметрами и начинает смену слайдов.
$('.carousel').carousel({
interval: 2000
})
.carousel('cycle')
Сменяет слайды карусели слева направо.
.carousel('pause')
Останавливает смену слайдов.
.carousel(number)
Прокручивает слайды до определенного момента (основано на 0, схоже с рядами). Возвращает значение функции-вызову до того, как элемент-«цель» показан (т.е. до того, как возникает событие slid.bs.carousel
).
.carousel('prev')
Переход к предыдущему элементу. Возврат к вызывающему абоненту до того, как будет показан предыдущий элемент (то есть до того, как произойдет событие slid.bs.carousel
).
.carousel('next')
Переход к следующему элементу. Возврат к вызывающей стороне до того, как будет показан следующий элемент (т.е. до того, как произойдет событие slid.bs.carousel
).
.carousel('dispose')
Разрушает карусель элемента.
.carousel('nextWhenVisible')
Не циклически переходите к следующей карусели, если страница не отображается или карусель или ее родительский элемент не видны. Возврат к вызывающей стороне до того, как будет показан следующий элемент (т.е. до того, как произойдет событие slid.bs.carousel
).
.carousel('to')
Циклически переключает карусель на определенный кадр (на основе 0, аналогично массиву). Возврат к вызывающей стороне до того, как будет показан следующий элемент (т.е. до того, как произойдет событие slid.bs.carousel
).
События
Класс карусели Bootstrap предоставляет два события для подключения к функциональности карусели. Оба события имеют следующие дополнительные свойства:
direction
: Направление, в котором движутся слайды ("left"
или"right"
).relatedTarget
: Элемент DOM, который движется на место «пролистанного» слайда.from
: Индекс текущего слайдаto
: Индекс следующего слайда
Все события карусели запускаются непосредственно в карусель (т.е. в <div class="carousel">
).
Тип события | Описание |
---|---|
slide.bs.carousel | Это событие запускается немедленно, когда вызван метод slide . |
slid.bs.carousel | Это событие запускается, когда карусель завершила переходы своих слайдов. |
$('#myCarousel').on('slide.bs.carousel', function () {
// do something…
})
Изменение продолжительности перехода
Длительность перехода .carousel-item
можно изменять в переменной Sass $carousel-transition
перед компиляцией, или обычным CSS (при использовании компилированного CSS). Если применяются множественные переходы, удостоверьтесь, что переход трансформации задан первым (например: transition: transform 2s ease, opacity .5s ease-out
).