JavaScript: карусель картинок, строим каркас 1: ilyachalov — LiveJournal
Решил задачу «Карусель» к подразделу 2.1 «Введение в браузерные события» второй части учебника по JavaScript.Задача состоит в том, чтобы на HTML-странице создать карусель картинок. Что такое «карусель картинок»? Это механизм, с помощью которого пользователь может листать имеющиеся картинки кнопками влево и вправо. В таком виде, бывает, оформляют фотоальбом на сайте или фотоальбомы в соцсетях.
В задаче дана HTML-страница, на которой частично уже построена карусель картинок. Требуется достроить каркас карусели, созданный на языках HTML и CSS, а затем придать карусели интерактивность, написав функционал кнопок на языке JavaScript. Код заданной HTML-страницы можно посмотреть в песочнице.
Мне было интересно сначала понять, как создали каркас карусели на языках HTML и CSS.
Для постройки тестовой карусели в задаче дано десять картинок:
https://ru.js.cx/carousel/1.png
https://ru.js.cx/carousel/2.
png
…
https://ru.js.cx/carousel/10.png
На этих картинках изображено десять разных смайликов.
Задача изначально упрощена: как я понимаю, предполагается, что все картинки представляют собой одинаковые квадраты (размеры разных картинок равны друг другу, ширина и высота каждой картинки тоже равны друг другу). Для хранения этого размера в будущем скрипте будем использовать константу PIC_SIZE, равную 130px (это размер оригиналов заданных картинок).
В теле HTML-страницы картинки помещены в пункты HTML-списка:
<ul> <li><img src="https://ru.js.cx/carousel/1.png"></li> <li><img src="https://ru.js.cx/carousel/2.png"></li> <!-- ... --> <li><img src="https://ru.js.cx/carousel/10.png"></li> </ul>
У меня в браузере («Microsoft Edge» на движке «Chromium») это выглядит так (картинка):
Серая линия слева и сверху — это граница области просмотра браузера.
Толстые черные точки слева от картинок смайликов — это значки пунктов списка.
Для нашей карусели картинок требуется, чтобы картинки располагались не вертикально, а горизонтально, очередью. Так как у нас картинки размещены в пунктах HTML-списка, нам требуется расположить пункты списка горизонтально, друг за другом. Сделаем это, настраивая стили HTML-списка и его пунктов на языке CSS. Стили в задаче размещены в отдельном файле , включенном на заданную HTML-страницу.
По умолчанию тип отображения (CSS-свойство display) пунктов HTML-списка равен значению list-item. В нашем случае он ведет себя как блочный элемент, то есть занимает всю ширину области просмотра. Кроме этого, этот тип отображения генерирует перед содержимым пункта псевдо-элемент ::marker (значок пункта списка). Поменяв тип отображения на значение inline-block, мы добьемся исчезновения псевдо-элементов ::marker у пунктов списка, а также того, что пункты списка смогут располагаться горизонтально, друг за другом:
ul li {
display: inline-block; /* разместить пункты списка горизонтально */
}
У меня в браузере это выглядит так (картинка):
У HTML-списка браузеры по умолчанию обычно устанавливают внутренние (padding) и внешние (margin) отступы.
В нашей карусели картинок эти отступы не нужны (могут усложнить расчёты в скрипте на языке JavaScript), поэтому уберем их:
ul {
margin: 0; /* уберем внешние и внутренние */
padding: 0; /* умолчательные отступы от браузера */
}
ul li {
display: inline-block; /* разместим пункты списка горизонтально */
}
Для картинок (это уже объяснялось в нескольких предыдущих постах) в стиле картинок укажем их ширину и высоту, чтобы браузер в любой ситуации знал размер содержимого пунктов списка и мог быстро отобразить картинки и пункты списка, не роясь в кэше в поисках размеров картинок. (Также таким образом исключаем ситуацию, когда при первой загрузке HTML-страницы браузер не знает размеров картинок и расчеты в скрипте на языке JavaScript, отталкивающиеся от размеров картинок, могут в этом случае дать неверные результаты.) Меняем код стилей:
ul {
margin: 0; /* уберем внешние и внутренние */
padding: 0; /* умолчательные отступы от браузера */
}
ul img {
width: 130px; /* размеры картинок */
height: 130px;
}
ul li {
display: inline-block; /* разместим пункты списка горизонтально */
}
Также в нашей карусели картинок нам не нужны и промежутки между картинками (тоже могут усложнить расчёты в скрипте на языке JavaScript).
ul {
margin: 0; /* уберем внешние и внутренние */
padding: 0; /* умолчательные отступы от браузера */
}
ul img {
width: 130px; /* размеры картинок */
height: 130px;
background-color: silver; /* временно, серый фон */
}
ul li {
display: inline-block; /* разместим пункты списка горизонтально */
border: 1px solid red; /* временно, красная рамка */
}
У меня в браузере получилось следующее (картинка):
Во-первых, обратим внимание на то, что между нашим HTML-списком и границей области просмотра браузера всё еще есть промежуток (у меня в браузере он равен 8px). Это внешний отступ (margin), устанавливаемый браузером по умолчанию для тела (body) HTML-страницы. Нам он не помешает, потому что в будущем мы вставим наш HTML-список внутрь другого контейнера, HTML-элемента .
Во-вторых, на иллюстрации видно, что между отдельными пунктами нашего HTML-списка (напомню, пункты временно обведены красной границей-рамкой для наглядности) есть промежуток. Откуда он взялся? На самом деле этот промежуток есть в исходном коде нашей HTML-страницы, это пробельные символы между HTML-элементами li (напомню, в состав пробельных символов входят не только пробелы, но и символы новой строки, и символы табуляции).
Избавиться от этого промежутка можно несколькими способами. Например, можно удалить пробельные символы между HTML-элементами в исходном коде нашей HTML-страницы. Но тогда исходный код нашей HTML-страницы станет плохо читаемым (все пункты HTML-списка будут слеплены в одну строку). Как я видел, из исходного кода HTML-страниц многих сайтов, сделанных профессионалами, убраны все лишние пробельные символы. Там это оправдано, потому что пользователь исходный код HTML-страницы не читает (ему достаточно отображения HTML-страницы в браузере), а кодеры пользуются специальными программами, которые убирают лишние пробельные символы только в самом конце написания HTML-страницы, перед ее загрузкой на сайт.
В нашем же случае я не хотел бы убирать пробельные символы в коде HTML-списка, чтобы не ухудшать читаемость кода заданной HTML-страницы. Тогда можно применить другой способ: сделать размер шрифта равным нулю с помощью указания font-size: 0; в стиле нашего HTML-списка.
В-третьих, на иллюстрации видно, что внутри каждого пункта нашего HTML-списка, между нижней границей картинки со смайликом и нижней границей самого пункта тоже присутствует некий промежуток (у меня в браузере он составил 4px). Откуда он взялся?
Дело в том, что HTML-элемент img по умолчанию является строчным HTML-элементом, то есть его тип отображения — inline. А браузер старается расположить все строчные HTML-элементы в строке так, чтобы все они находились на базовом уровне строки. Что это за уровень? Это линия, на которой «стоят» все буквы в строке. У некоторых букв элементы этих букв «свисают» ниже базовой линии строки. В разных шрифтах по-разному, но зачастую, к примеру, у русской строчной буквы «у» или у английской буквы «g» нижняя закорючка «свисает» ниже базовой линии.
4px).Чтобы проиллюстрировать описанное, добавим к нашему HTML-списку временный пункт с текстом:
<ul> <li><img src="https://ru.js.cx/carousel/1.png"></li> <li><img src="https://ru.js.cx/carousel/2.png"></li> <!-- ... --> <li><img src="https://ru.js.cx/carousel/10.png"></li> <li>Буквы: ф, р, g.</li> <!-- временный пункт --> </ul>
Вот как это выглядит у меня в браузере (картинка):
Увеличим (я увеличил кусочек предыдущей картинки в графическом редакторе в 4 раза):
На этой иллюстрации я обозначил базовую линию тонкой красной линией. Текст четвертого пункта нашего HTML-списка отображен шрифтом по умолчанию (в моем браузере в настройках шрифтом по умолчанию установлен «Times New Roman»), размер шрифта тоже — по умолчанию (в моем браузере это ).
В этом шрифте при этом размере строчные русские буквы «у», «ф», «р» и строчная английская буква «g», как видно на иллюстрации, «свисают» ниже базовой линии строки на 3 пикселя. Запятая «свисает» ниже базовой линии строки на 2 пикселя.
Теперь стало понятно, откуда взялся рассматриваемый промежуток. А как его убрать? Тут тоже есть несколько способов. Например, если поменять тип отображения HTML-элемента img с умолчательного inline на block с помощью указания display: block; в стиле HTML-элемента img, то HTML-элемент img станет не строчным, а блочным, браузер не станет резервировать место под «свисающие» буквы и рассматриваемый промежуток исчезнет.
Другой вариант — это вышеупомянутое указание font-size: 0; в стиле нашего HTML-списка. Если размер шрифта будет равен нулю, то браузеру не будет нужды резервировать место под «свисающие буквы» и рассматриваемый промежуток опять же исчезнет. Поэтому, думаю, стоит остановиться на этом варианте, потому что он устраняет сразу две проблемы (два вида промежутков).
Итак, мы организовали наш HTML-список картинок в горизонтальную очередь и убрали все ненужные отступы и промежутки между картинками. Однако, все вышеприведенные тесты проводились только для трех картинок. Если теперь добавить в HTML-список все 10 заданных изначально картинок, то те картинки, которые не поместятся в строке по ширине области просмотра браузера, перейдут на следующую строку. А нам нужно, чтобы все заданные картинки представляли очередь только в одну строку, даже если она выйдет за пределы области просмотра браузера. Для этого в стиль HTML-списка можно добавить указание width: 9999px;. Не обязательно, конечно, было брать такую большую ширину, но а вдруг в будущем нам захочется добавить картинок в карусель? Запас не помешает.
В итоге мы пока получили вот такой файл со стилями:
ul {
margin: 0; /* уберем внешние и внутренние умолчательные */
padding: 0; /* отступы, назначенные браузером */
font-size: 0px; /* уберем промежутки между картинками */
/* и промежутки для «свисающих» букв */
width: 9999px; /* разместим пункты списка в одну строку */
}
ul img {
width: 130px; /* размеры картинок */
height: 130px;
}
ul li {
display: inline-block; /* разместим пункты списка горизонтально */
/* и уберем маркеры списка */
}
Продолжение тут.

html — Выравнивание размера изображений в карусели по вертикали
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"
integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<script src="https://cdn.
jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
crossorigin="anonymous"></script>
<div>
<nav>
<a href="#">
<img src="src/img/navLogo.png">
</a>
<button type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Наши контакты
</a>
<div aria-labelledby="navbarDropdown">
<a href="#">Как с нами связаться?</a>
<div></div>
<a href="#">Где нас найти?</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
<div>
<div>
<div>
<ol>
<li data-target="#carouselExampleIndicators" data-slide-to="0"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
</ol>
<div>
<div>
<img src="https://cdn.
bitrix24.ru/b205787/landing/4fa/4fa630f6ec6e609b82b65ce6e7585c28/nasza_flota.jpg" alt="First slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/a40/a40b2b078db49f9c2e23233d228b87c3/2_2x.jpg" alt="Second slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/788/788484872f6143c0511ec4faefbeabb7/5_2x.jpg" alt="Third slide">
</div>
</div>
<a href="#carouselExampleIndicators" role="button" data-slide="prev">
<span aria-hidden="true"></span>
<span>Previous</span>
</a>
<a href="#carouselExampleIndicators" role="button" data-slide="next">
<span aria-hidden="true"></span>
<span>Next</span>
</a>
</div>
</div>
</div>Доброго времени суток.
Хотел бы узнать. В данном случае можно ли как то изменить размер слайдов к какой то общей величине? Или здесь проблема в самих исходных изображениях?
- html
- css
- bootstrap
- bootstrap4
Не особо понятно, что именно вы хотите сделать, но, скорее всего, можно.
Можете попробовать поиграться со свойством object-fit для изображений, отображение которых вы хотите изменить.
.carousel-item {
height: 300px;
}<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.
min.js"
integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx"
crossorigin="anonymous"></script>
<div>
<nav>
<a href="#">
<img src="src/img/navLogo.png">
</a>
<button type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Наши контакты
</a>
<div aria-labelledby="navbarDropdown">
<a href="#">Как с нами связаться?</a>
<div></div>
<a href="#">Где нас найти?</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
<div>
<div>
<div>
<ol>
<li data-target="#carouselExampleIndicators" data-slide-to="0"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
</ol>
<div>
<div>
<img src="https://cdn.
bitrix24.ru/b205787/landing/4fa/4fa630f6ec6e609b82b65ce6e7585c28/nasza_flota.jpg" alt="First slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/a40/a40b2b078db49f9c2e23233d228b87c3/2_2x.jpg" alt="Second slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/788/788484872f6143c0511ec4faefbeabb7/5_2x.jpg" alt="Third slide">
</div>
</div>
<a href="#carouselExampleIndicators" role="button" data-slide="prev">
<span aria-hidden="true"></span>
<span>Previous</span>
</a>
<a href="#carouselExampleIndicators" role="button" data-slide="next">
<span aria-hidden="true"></span>
<span>Next</span>
</a>
</div>
</div>
</div>
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Thumbnail Carousel — Splide
Введение
Карусель может синхронизироваться с другой каруселью методом sync() ,
и опция isNaviation делает карусель доступной для навигации.
Используя эти две функции, мы можем создать карусель с миниатюрами, например:
На этой странице объясняется, как создать карусель такого типа.
Карусель миниатюр
Начнем с карусели миниатюр.
<раздел
id="эскиз-карусель"
класс="слайд"
aria-метка=" Карусель с миниатюрами. Выбор миниатюры изменит карусель Beautiful Gallery."
>
<делениекласс="splide__track">
<ulclass="splide__list">
<liкласс="splide__slide">
<изображение 9000 6источник="thumbnail01.jpg"
alt="">9000 5 <
liкласс="splide__slide">
<imgsrc="thumbnail02.jpg"90 005 альтернативный="">
<liкласс="splide__slide">
<imgsrc="thumbnail03.jpg"alt="">
</дел>
</раздел>HTML
Карусель эскизов должна отображать несколько слайдов на странице.
Обычно мы используем параметр на страницу для определения количества слайдов,
но трудно определить число с точки зрения ответственности, даже если использовать точки останова.
Чтобы решить эту проблему, давайте использовать fixedWidth , чтобы зафиксировать ширину слайда в зависимости от размера окна.
документ.addEventListener('DOMContentLoaded',функция9000 6(){
новыйШлиц('#thumbnail-carousel',{
fixedWidth:100,
пробел:10,
перемотка назад:правда, 90 006
нумерация страниц:false,
}900 05).![]()
крепление();
});JavaScript
Затем нам нужно подогнать миниатюру под размер слайда. Если все эскизы имеют одинаковое соотношение сторон, достаточно следующего CSS:
.splide__slideimg{90 006
ширина:100%;
высота:авто;
}CSS
Если нет, давайте использовать object-fit , чтобы закрыть каждый слайд миниатюрой (IE не поддерживает это свойство!).
Чтобы это работало, нам нужно установить fixedHeight :
document.addEventListener('DOMContentLoaded',функция(9000 5 ){
новыйСлайд('#thumbnail-carousel',{
fixedWidth: 9000 6100,
fixedHeight:60,90 006
зазор:10,
перемотка 9 0006:правда,
нумерация страниц:900 05ложь,
}).![]()
крепление();
});JavaScript
... и применить это свойство к эскизам:
.splide__slideimg900 06{
ширина:100%;
высота:100%;
предметная:крышка;
}CSS
Теперь карусель будет выглядеть так:
Выглядит довольно хорошо, но есть несколько вещей, которые мы должны учитывать:
- Пользователь не может сказать, какой слайд выбран
-
100pxвероятно великоват для мобильных устройств - Активный слайд должен быть по возможности в центре
Если вы используете тему CSS, например splide. или
min.css splide-skyblue.min.css ,
он подчеркивает активный слайд, добавляя стиль границы.
В противном случае вам придется вручную стилизовать его с помощью класса статуса is-active :
.splide__slide{
непрозрачность:0,6;
}
05 непрозрачность:1;
}CSS
Опции breakpoints и focus помогают решить вторую и третью проблемы.
Если вы не используете object-fit , fixedHeight не требуется.
новыйSplide('#thumbnail-carousel',{
фиксированная ширина:1009000 5 ,
fixedHeight:60,
зазор:10,
перемотка назад:правда,
нумерация страниц9000 5:ложь,
фокус:9 0005 'центр',
точки останова:{
600:{
фиксированная ширина:90 00560,9 0017
fixedHeight:44,}).![]()
крепление();JavaScript
Далее нам нужно сделать слайды интерактивными, установив isNavigation на true :
new90 006Splide('#thumbnail-carousel',{
фиксированная ширина:100,
fixedHeight:900 0660,
зазор:109 0005 ,
перемотка назад:правда,
пагинация:ложь,
isNavigation:90 005true,
контрольные точки:{ 90 006
600:{
фиксированная ширина90 005 :60,
fixedHeight:44,
}).![]()
крепление();JavaScript
Обратите внимание, что карусель миниатюр не должна иметь нумерацию страниц , иначе дерево доступности будет немного запутанным.
В результате карусель выглядит так. Нажмите на миниатюру, и вы увидите, как движется карусель:
Чтобы игнорировать небольшое перетаскивание мышью, используйте параметр dragMinThreshold .
Основная карусель
В этом уроке используется следующая карусель затухания.
Вам нужно назначить другой идентификатор, например main-carousel , или класс, чтобы получить его позже с помощью сценария.
В этом примере отключаются стрелки и нумерация страниц, но если вы хотите включить их, просто удалите эти параметры.
Синхронизация
Чтобы синхронизировать основную карусель с миниатюрами, используйте Splide#sync() 9Метод 0006.
Вы должны вызвать его до mount() .
переменнаяосновная=новая90 005 Splide('#main-carousel',{...});
варэскизы=новыйSplide('#thumbnail-carousel',{...});
основной.![]()
синхронизация(эскизы);
основной.крепление();
эскизы.крепление();JavaScript
Вот и все! 🎊 Вот весь код этого туториала:
1
2
3
4
5
6
7 900 09
8
9
10
11
12
13
14
15
16
17
18
19 90 009
20
21
22
23
24
25
26
27
документ.addEventListener('DOMContentLoaded',функция9000 6(){
переменнаяосновная=900 05 новыйSplide('#main-carousel',{90 005
тип:'выцветание',
перемотка назад:правда,
нумерация страниц:9000 6ложь,
стрелки:ложь,
varэскизы=новыйСлайд('#thumbnail-carousel',{
фиксированная ширина:100,
fixedHeight9000 6:60,
пробел:900 0510,
перемотка назад:правда,9 0006
нумерация страниц:ложь,
isNavi: Точки останова{
600:{
фиксированный Ширина:60,
fixedHeight:44,
основной.![]()
синхронизация(эскизы);
основной.крепление();
эскизы.крепление();
});JavaScript
Прогресс карусели — Splide
Введение
Всего несколькими строками вы можете создать индикатор выполнения карусели, подобный этому:
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
HTML и CSS
Мы можем создать панель с HTML CSS Я рекомендую использовать то же значение скорости карусели ( Мы можем рассчитать скорость выполнения из текущего индекса и конечного индекса — JavaScript Чтобы установить начальную ширину, пример кода также прослушивает событие Вы можете создать интерактивный индикатор выполнения, выполнив еще несколько шагов: Для доступности я рекомендую предоставить атрибуты aria, такие как тегами
< секция класс = "шлиф" aria- метка = ".
.." > < div class = "splide__track" > < ul класс = "splide__list" > < li класс = "splide__slide" > 9000 6 Слайд 01 < / li > < / 9000 5 деление > < деление класс = "my-carousel-progress" > < div class = 90 005 "моя-карусель-прогресс-бар" > < / дел.
v > < / раздел >
.my-carousel-progress { фон : 9000 6 #ccc ; } .my-carousel-progress-bar { фон 90 005 : зелено-желтый ; высота : 2 px ; переход : ширина 400 мс легкость ; ширина : 0 ; } options. ), что и продолжительность перехода.
Это делает карусель и бар более синхронизированными.
speed JavaScript
(текущий + 1) / (конечный + 1) .
Обновим ширину полосы через Splide#index и Controller#getEnd() каждый раз, когда карусель движется:
var splide = new 90 005 Splide ( '.splide' ) ; вар бар = слайд . корень . querySelector ( '.my-carousel-progress-bar' ) ; шлейф .
на ( 'навесное перемещение' , функция ( 9 0006 ) { вар конец = шлиф . Компоненты . Контроллер . getEnd ( ) + 1 ; вар скорость = Математика . мин. ( ( слайд . индекс 900 06 + 1 ) / конец , 1 ) ; бар .
стиль . ширина = Строка ( 100 * курс ) + '%' ; } ) ; шлейф . крепление ( ) ; монтирования . Советы
Splide#go() aria-controls , aria-valuenow и другие.

jsdelivr.net/npm/
bitrix24.ru/b205787/landing/4fa/4fa630f6ec6e609b82b65ce6e7585c28/nasza_flota.jpg" alt="First slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/a40/a40b2b078db49f9c2e23233d228b87c3/2_2x.jpg" alt="Second slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/788/788484872f6143c0511ec4faefbeabb7/5_2x.jpg" alt="Third slide">
</div>
</div>
<a href="#carouselExampleIndicators" role="button" data-slide="prev">
<span aria-hidden="true"></span>
<span>Previous</span>
</a>
<a href="#carouselExampleIndicators" role="button" data-slide="next">
<span aria-hidden="true"></span>
<span>Next</span>
</a>
</div>
</div>
</div>
min.js"
integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/
bitrix24.ru/b205787/landing/4fa/4fa630f6ec6e609b82b65ce6e7585c28/nasza_flota.jpg" alt="First slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/a40/a40b2b078db49f9c2e23233d228b87c3/2_2x.jpg" alt="Second slide">
</div>
<div>
<img src="https://cdn.bitrix24.ru/b205787/landing/788/788484872f6143c0511ec4faefbeabb7/5_2x.jpg" alt="Third slide">
</div>
</div>
<a href="#carouselExampleIndicators" role="button" data-slide="prev">
<span aria-hidden="true"></span>
<span>Previous</span>
</a>
<a href="#carouselExampleIndicators" role="button" data-slide="next">
<span aria-hidden="true"></span>
<span>Next</span>
</a>
</div>
</div>
</div>
jpg"