10 лучших html5 слайдеров для картинок и текста

Без JavaScript

В данный момент пользователи с отключенным JavaScript работают без изображений, так как переключение на невозможно. Кажется, самое простое решение — добавить теги , в которых содержатся изображения с уже установленными значениями .

<noscript>    <img src="" alt=""></noscript>

Отдельное демо слайдера с ленивой загрузкой.

Теперь наш слайдер работает и без JavaScript. У нас неплохо выходит. Однако мы обрабатываем только случай «без JavaScript», который редко встречается. Это не печально распространённая ситуация со «сломанным JavaScript». Рик Шеннинк решил эту проблему, поместив в документа. Есть демо с этим методом, где Рик сначала заменяет на , и при тестировании довольно надёжно извлекает источники изображения при первой загрузке.

Кнопки вперёд и назад

У типичных слайдеров есть кнопки по обеим сторонам, которые перемещают слайды вперёд и назад. Это соглашение, возможно, стоит принять по двум причинам:

  • Наличие кнопок делает слайдер больше похожим на самого себя. Так же становится более очевидной возможность взаимодействия с ним.
  • Кнопки позволяют пользователю зафиксировать слайды на месте. Больше не нужно крутить туда-сюда, чтобы отцентрировать нужный слайд.

Хитрость заключается в том, чтобы использовать уже разработанную нами функциональность, а не заменять её. Наши кнопки должны заранее знать о том, что кто-то уже прокручивает или свайпает слайды, и уметь с этим работать.

Адаптируя наш скрипт , мы можем добавлять и удалять класс у слайдов:

slides.forEach(entry => {    entry.target.classList.remove('visible')  if (!entry.isIntersecting) {    return  }  let img = entry.target.querySelector('img')  if (img.dataset.src)  {    img.setAttribute('src', img.dataset.src)    img.removeAttribute('data-src')  }  entry.target.classList.add('visible')})

Скрипт слайдера

Пожалуй, наиболее сложный вариант установки слайдера. Тем не менее, многие веб-дизайнеры предпочитают делать всё своими руками. Благодаря такому подходу каждый свеженаписанный слайдер получается уникальным и ни на что не похожим.

Готовые решения выглядят стильно и необычно.

Вы можете отыскать весьма нестандартные примеры. Но при этом каждый из них по-своему интересен.

Владельцы авторских блогов и рядовых сайтов, не вникающие в дебри чистого сайтостроения, обычно хотят, чтобы все элементы были реализованы как можно проще. Специально для них разработаны инструменты, простые в установке и неприхотливые в эксплуатации. Существует множество готовых решений для WordPress.

Например, это элементарный плагин Coin Slider. Он не требует специальных знаний для установки. Простой функционал является его основным достоинством.

А вот Slideshow Gallery позволяет создавать слайдеры с превью. Если кликнуть на картинку, она автоматически увеличится.

JavaScript:

Суть программы будет в том что при нажатие на кнопку Right будет удалятся класс block за счёт чего скрывается картинка а следующему элементу добавляется класс block.

JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

// Берём кнопку вперёд

let btnRight=document.querySelector(«.btnRight»);

// Берём слайды

let slides=document.querySelectorAll(«img»);

// Объявляем переменную i

leti=;

 
// Объявляем событие нажатия на кнопку вперёд

btnRight.addEventListener(«click»,function(){

// Увеличиваем переменную i

++i

// Условие если переменная i больше или равна количеству слайдов

if(i>=slides.length){

// Удаляем класс block предыдущему слайду

slidesi-1.classList.remove(«block»);

// Присваиваем переменной i ноль

i=;

// Добавляем класс block следующему слайду

slidesi.classList.add(«block»);

}else{// Иначе

// Удаляем класс block предыдущему слайду

slidesi-1.classList.remove(«block»);

// Добавляем класс block следующему слайду

slidesi.classList.add(«block»);

}

})

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

Пишем код

На различных курсах веб-разработки знакомство с фронтендом начинается с описания основных технологий, а именно:

  • HTML — язык гипертекстовой разметки, на котором пишется «скелет» сайта. Если провести аналогию с домом, то это каркас. Грубо говоря, вы строите разметку, на которую после будет ложиться оформление.
  • CSS — каскадные таблицы стилей или то самое оформление. Вернёмся к примеру с домом: после постройки его нужно облицевать, покрасить, сделать презентабельным, и именно CSS описывает внешний вид сайта.
  • JavaScript — язык программирования, который обеспечивает функциональность. Вы можете взаимодействовать с вещами в вашем доме — включать и выключать свет, бытовую технику, воду и многое другое. Вы точно так же можете взаимодействовать с сайтом, нажимая кнопки, наводя курсор на изображения и заполняя формы. JavaScript обрабатывает все эти взаимодействия, и, как язык сценариев, он может предоставлять правила и логику для определения того, что должно произойти дальше.

HTML

Обучение веб-разработке стоит начать с HTML, так как это каркас сайта. Каждый HTML-документ имеет стандартную структуру:

Но в нашем примере прописывать структуру всей страницы не нужно, ведь мы работаем с отдельным компонентом, который потом будет размещаться между тегами . Здесь всё просто: у нас есть основной блок (тег ), который является родительским и содержит ещё три блока с разными картинками — будущими слайдами:

Обратите внимание, что у каждого тега есть свой класс. Именно по этим классам будет применяться оформление CSS

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

CSS

В каскадных стилях задаём ширину, высоту, позиционирование, цвет и анимацию. В нашем случае мы работаем отдельно с контейнером слайдера, отдельно с контейнерами картинок, которые прописаны как item, кнопками, добавлением к ним фона и анимацией слайдов:

Со всеми значениями можно поэкспериментировать в редакторе. Если есть сомнения по поводу какого-то из атрибутов, достаточно его удалить и посмотреть, что изменилось.

JavaScript

Веб-разработчик, обучение которого ограничивается HTML и CSS, — это скорее веб-дизайнер. Мы же переходим к главному языку фронтенда, который способен вдохнуть жизнь в визуальное решение:

Но не стоит забывать, что не JavaScript единым: современные библиотеки и фреймворки способны упростить разработку и улучшить функциональность веб-компонента. Например, Bootstrap позволяет верстать сайты в разы быстрее, и даже начинающий разработчик может создать рабочий макет с использованием данного фреймворка. А ещё можно написать слайдер на чистом HTML/CSS, чтобы потренировать навыки в вёрстке и каскадных таблицах стилей.

Приведённый в уроке пример довольно прост и призван показать возможности стандартного взаимодействия HTML, CSS и JavaScript.

Как сделать JavaScript слайдер: начало

Сегодня, думаю, что каждый, кто попадал в похожую ситуацию, начинал с поисков имеющихся наработок, т.к. когда задача сделать JS карусель стоит в рамках работы — это всегда должно быть сделано максимально быстро. И при таких условиях сидеть и выдумывать свои велосипеды, ясное дело, никто не позволит.

Заказчикам всегда наплевать на то, как код написан, какая у него архитектура, главное — видеть результат!

В итоге, как вы поняли, перед тем, как написать слайдер на JavaScript без jQuery, я решил подыскать готовый и доработать его под свои нужды. Почему без jQuery? Да потому что на целевом ресурсе, куда я планировал подключать свой слайдер через сервис, вызов jQuery в коде был расположен позже скрипта, подключаемого сервисом. Поэтому jQuery конструкции в моём коде просто не воспринимались.

В качестве основы я взял этот JavaScript слайдер изображений — https://codepen.io/gabrieleromanato/pen/pIfoD.

Остановиться я решил именно на нём, т.к. его JS код был написан с применением принципов ООП и классы в нём основываются на прототипах, а не на банальных функциях.

Честно говоря, я глубоко не понимаю и не признаю сегодняшнюю шумиху вокруг JavaScript с использование ООП, фреймворков и прочих архитектурных штук в языке, который изначально задумывался как простенький язык динамических сценариев. Равно как и сам JS я откровенно недолюбливаю с его синтаксическим винегретом, позволяющим одни и те же конструкции писать несколькими способами.

Но, к сожалению, в современном мире мои позиции мало кто разделяет, т.к. данный язык развивается сумасшедшими темпами и предпринимает даже попытки завоевать умы бэкенд разработчиков с помощью Node.js как альтернативы Java, PHP, C#, Ruby и других монстров.

В итоге, чтобы банально не остаться без работы, приходится по-тихоньку с JavaScript разбираться. А в выбранной мною реализации слайдера на чистом JavaScript я встретил то, что, как вы поняли, презираю в данном языке. Поэтому я её и выбрал, чтобы был хоть какой-то повод поработать и разобраться с JavaScript ООП и прототипными классами — иначе я бы к ним добровольно никогда в жизни не прикоснулся бы

На базе найденного мною кода мне необходимо было разработать слайдер на чистом JS во всплывающем окне (такую штуку ещё называют popup, попап и т.д.), который имел бы кнопки переключения слайдов и кликабельные индикаторы текущего слайда. Также нужно было сделать кнопку для закрытия данного окна.

Вот, что у меня получилось в итоге.

2. HTML5 Gallery Slideshow

HTML5 Gallery Slideshow — отличный выбор для демонстрации изображений и текста в виде слайдера. Главным преимуществом продаж карусели является ее невероятная простота в использовании. После внедрения в необходимое место, она адаптируется по размеру родительского контейнера, то есть к тегу div или другому тегу HTML.

Еще одна замечательная особенность заключается в возможности расположения нескольких галерей с разным набором изображений и настроек на одной и той же странице.

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

JavaScript слайд шоу на базе разработанной библиотеки

Иногда на практике может потребоваться сделать JS карусель с прокруткой, которую часто называют слайд шоу. В моём случае этого не требовалось, но я всё же решил сделать такую на базе итогового кода библиотеки для случая, когда это может пригодиться.

На самом деле, реализация JavaScript слайд шоу отличается от обычного слайдера совсем незначительно. Разница заключается лишь в том, что в слайд шоу слайды переключаются автоматически с заданным временным интервалом, а в случае обычной JS карусели они меняются вручную с помощь элементов навигации.

Для автоматической прокрутки слайдов я добавил в самый конец своего класса следующий метод:

slideShow: function (timeout) {
    var sliderCount = this.links.length;
    var self = this;

    this.slideCycle = setInterval(function () {
        var currentSlideNumber = document.querySelector('#slider-nav a.current').getAttribute("data-slide");
        var slideId = parseInt(currentSlideNumber, 10) + 1;
        self.slide(document.querySelector(''));
    }, timeout);
}

Что здесь происходит — думаю, понятно. Для создания данного метода я скопировал код из события клика на кнопки ручного переключения слайдов и разместил его внутри вызова JavaScript функции setInterval(), которая выполняет указанное действие через заданный промежуток времени.

Сценарий действия передаётся первым аргументом в виде анонимной функции, а временной интервал — вторым, который я решил сделать в виде переменной, значение которой передаётся при вызове slideShow().

Единственная модификация кода внутри setInterval(), которая потребовалась, — это определение количества слайдов и сравнение с ним индекса текущего слайда для зацикленности автоматического переключения.

Ну, и для того, чтобы данный код заработал, сам метод необходимо вызвать. Я решил сделать это всё в том же navigate(), который как раз и является сборником всяких сценариев. Вызов я разместил в самом конце, передав в качестве аргумента значение временного интервала для автоматической смены слайдов в нашем JS слайд шоу (я выбрал 2000 милисекунд или 2 секунды, вы можете по необходимости изменять это число):

self.slideShow(2000);

После этого проверяйте работу JavaScript слайдера, не забыв при этом почистить кэш сайта и браузера.

В итоге, у нас получилось JS слайд шоу, в котором слайды переключаются автоматически и по кругу, т.е. при достижении последнего слайда шоу переходит на новый цикл, и показ снова начинается с самого первого элемента.

При работе с различными библиотеками JS каруселей картинок и отзывов я заметил, что данную практику разработчики активно применяют, но с некоторым дополнением. Во всех увиденных мною решениях автоматический показ слайдов прерывается, если пользователь сделал ручное переключение. Поэтому я решил сделать подобное и в своей библиотеке.

Для прерывания автоматического показа слайдов JavaScript карусели я решил воспользоваться стандартной JS функцией clearInterval(), которой в качестве аргумента передаю идентификатор временного интервала, возвращаемого функцией setInterval() при его установке.

В итоге, получился следующий код, который я решил не оформлять отдельным методом:

clearInterval(self.slideCycle);

И разместил его в местах описания действий при кликах на различные элементы навигации, т.е. в следующих:

link.addEventListener("click", function (e) {...});

self.prevBtn.addEventListener('click', function (e) {...});

self.nextBtn.addEventListener('click', function (e) {...});

Вызов clearInterval() лучше делать поближе к самому событию клика, главное, чтобы перед ним, а не после.

Исходные коды и подключение слайдера к сайту

Проект слайдера расположен на GitHub по этому адресу. Данный слайдер распространяется под лицензией MIT. Его можно использовать бесплатно как в личных проектах, так и в коммерческих. Поблагодарить автора и поддержать дальнейшее развитие слайдера можно на этой страничке.

Основные характеристики слайдера:

  • адаптивный;
  • лёгкий (без jQuery);
  • простой (с минимальным набором функций);
  • наличие механизма автоматического смена слайдов через определенные промежутки времени;
  • универсальный (можно использовать для текстовой информации, изображений, отзывов, товаров и др.).

Подключение слайдера к странице осуществляется посредством выполнения следующих действий:

  • вставить в необходимое место html код слайдера;
  • подключить файл со стилями или добавить их в существующий файл; также стили можно вставить прямо на страницу;
  • подключить js-скрипт слайдера или вставить его в существующий файл; также код можно добавить прямо на страницу.

Демо слайдера расположено на этой странице.

Slider by WD – Responsive Slider

Этот бесплатный слайдер для WordPress так же довольно простой, но в отличии от MetaSlider он имеет несколько интересных эффектов смены слайдов, больше настроек и некоторые интересные фишки, которых нет в других плагинах.

Основные особенности Slider by WD:

  • Простой интерфейс и возможность создавать несколько слайдеров и для каждого задавать свои настройки
  • Есть возможность растягивать слайдер на всю ширину или задавать фиксированные размеры
  • Позволяет настаивать автопрокрутку, время между сменой слайдов, скорость анимации цикличность слайдов, остановку при наведении
  • Можно задать ширину экрана устройства, на которой слайдер будет скрываться или задавать ширину экрана, начиная с которой слайдер будет становиться на всю ширину экрана (в случае если вы изначально задавали фиксированный размер)
  • Возможность добавление водяных знаков на слайды
  • Задание цвета границы слайд шоу и радиуса скругления углов
  • Можно задавать музыку, которая будет играть во время прокрутки слайдов
  • Задание отступов и тени в CSS формате
  • Защита от щелчка правой кнопкой, на случай если вы не хотите чтобы кто то мог сохранить ваши слайды и использовать у себя
  • Расширенные настройки для навигации. Можно задавать тип стрелок и переключателей, возможность переключения слфйдов с клавиатуры или колёсиком мышки, поддержка управления с сенсорных экранов и т.д.
  • Возможность добавление Time bar, который представляет собой полоску или круг, отображающий сколько времени осталось до переключения следующего слайда
  • Поддержка добавления пользовательских CSS свойств
  • Выводится на любой странице, в виджете или статье при помощи шорткода или специальной кнопки на панели инструментов визуального редактора WordPress. Так же можно выводить в шаблоне.

Инициализация и настройка слайдера

Инициализация карусели осуществляется посредством вызова функции и указания ей в качестве первого аргумента селектора, определяющего слайдер в документе:

// инициализация элемента .slider в качестве карусели
slideShow('.slider');

Кроме селектора функции можно передать дополнительные параметры, все они указываются в формате объекта посредством 2 параметра:

// инициализация элемента .slider в качестве карусели и настройка её с помощью дополнительных параметров
slideShow('.slider', {
  isAutoplay: false, // false (по умолчанию) или true
  directionAutoplay: 'next', // 'next' (по умолчанию) или 'prev'
  delayAutoplay: 5000, // 5000 (по умолчанию) или любое другое число
  isPauseOnHover: true // true (по умолчанию) или false
});

Назначение ключей:

  • – определяет, необходимо ли инициализировать слайдер с автоматической сменой элементов (по умолчанию этот ключ имеет значение );
  • – определяет направление для механизма автоматической смены слайдов (по умолчанию ‘next’); для изменения направления установите ‘prev’;
  • – задержка в миллисекундах перед процессом автоматической сменой одного слайда на другой (по умолчанию 5000 мс);
  • – определяет необходимо ли останавливать автоматическую смену слайдов при нахождении курсора в зоне слайдера (по умолчанию )

Например, если вам нужно инициализировать слайдер и включить у него автоматическую смену слайдов, то используйте следующую конструкцию:

// инициализация элемента .slider в качестве карусели и настройка её с помощью дополнительных параметров
slideShow('.slider', {
  isAutoplay: true
});

Кроме этого, вы можете управлять слайдом с помощью методов. Для этого вам нужно сохранить в переменную результат выполнения функции :

// инициализация элемента .slider в качестве карусели и настройка её с помощью дополнительных параметров
var sliderOne = slideShow('.slider');

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

// выполняет переход на следующий слайд
sliderOne.next();

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

  • – останавливает автоматическую смену слайдов;
  • – выполняет переход на следующий слайд;
  • – выполняет переход на предыдущий слайд;
  • – включает автоматическую смену слайдов.

CSS:

.slideshow {
width: 100%;
height: 500px;
position: relative;
overflow: hidden;
background: #000;
margin: 20px 0;
}
.slideshow-item {
width: 100%;
height: 100%;
position: absolute;
opacity: 0;
animation: slideanim 40s infinite;
}
.slideshow-item:nth-child(1),
.slideshow-item:nth-child(1) img {
animation-delay: 0;
}
.slideshow-item:nth-child(2),
.slideshow-item:nth-child(2) img {
animation-delay: 10s;
}
.slideshow-item:nth-child(3),
.slideshow-item:nth-child(3) img {
animation-delay: 20s;
}
.slideshow-item:nth-child(4),
.slideshow-item:nth-child(4) img {
animation-delay: 30s;
}
.slideshow-item img {
width: 100%;
height: 100%;
object-fit: cover;
animation: zoom 40s infinite;
}
.slideshow-item-text {
max-width: 50%;
position: absolute;
bottom: 20px;
left: 20px;
background-color: rgba(0,0,0,0.7);
color: #fff;
padding: 20px 30px;
font-family: Verdana, sans-serif;
}
.slideshow-item-text h5 {
font-size: 22px;
margin: 0 0 10px 0;
color: #BFE2FF;
}
.slideshow-item-text p {
font-size: 15px;
margin-bottom: 10px;
}
@keyframes slideanim {
12.5%{
opacity: 1;
}
25%{
opacity: 1;
}
37.5%{
opacity: 0;
}
}
@keyframes zoom {
50%{
transform: scale(1.3);
}
}
@media screen and (max-width: 1100px){
.slideshow-item-text{
max-width: 75%;
}
}
@media screen and (max-width: 456px){
.slideshow-item-text {
bottom: 0;
left: 0;
max-width: 100%;
}
.slideshow-item-text h5 {
font-size: 18px;
}
.slideshow-item-text p {
font-size: 13px;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

.slideshow {

width100%;

height500px;

positionrelative;

overflowhidden;

background#000;

margin20px;

}

.slideshow-item {

width100%;

height100%;

positionabsolute;

opacity;

animationslideanim40sinfinite;

}
.slideshow-item:nth-child(1),

.slideshow-item:nth-child(1) img {

animation-delay;

}
.slideshow-item:nth-child(2),

.slideshow-item:nth-child(2) img {

animation-delay10s;

}
.slideshow-item:nth-child(3),

.slideshow-item:nth-child(3) img {

animation-delay20s;

}
.slideshow-item:nth-child(4),

.slideshow-item:nth-child(4) img {

animation-delay30s;

}

.slideshow-item img {

width100%;

height100%;

object-fitcover;

animationzoom40sinfinite;

}

.slideshow-item-text {

max-width50%;

positionabsolute;

bottom20px;

left20px;

background-colorrgba(0,0,0,0.7);

color#fff;

padding20px30px;

font-familyVerdana,sans-serif;

}

.slideshow-item-text h5 {

font-size22px;

margin10px;

color#BFE2FF;

}

.slideshow-item-text p {

font-size15px;

margin-bottom10px;

}

@keyframes slideanim {

12.5%{

opacity1;

}

25%{

opacity1;

}

37.5%{

opacity;

}

}

@keyframes zoom {

50%{

transformscale(1.3);

}

}

@media screen and (max-width: 1100px){

.slideshow-item-text{

max-width75%;

}

}

@media screen and (max-width: 456px){

.slideshow-item-text {

bottom;

left;

max-width100%;

}

.slideshow-item-text h5 {

font-size18px;

}

.slideshow-item-text p {

font-size13px;

}

}

Немного о коде

На показ каждого слайдера выделяется 10 секунд, а всего их 4. Поэтому общая продолжительность анимации составляет 40 секунд. Это указывается в строках и

Для каждого слайда отдельно устанавливается задержка, это классы , и т.д.

Значения в анимации устанавливаются так:

  • 100 / 4 (кол-во слайдов) / 2, при котором переходим с полной прозрачности в видимую область
  • 100 / 4 (кол-во слайдов), при котором показываем непрозрачный слайд
  • — складываем первые два значения для перехода опять в прозрачность

Значения в анимации устанавливаются так:

50% {transform: scale(1.3)} — 100 / 4 (кол-во слайдов) x 2, при котором увеличиваем фотографию

Например, для 7-ми слайдов эти анимации будут выглядеть так:

@keyframes slideanim {
7.15%{
opacity: 1;
}
14.3%{
opacity: 1;
}
21.5%{
opacity: 0;
}
}
@keyframes zoom {
28.5%{
transform: scale(1.3);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

@keyframes slideanim {

7.15%{

opacity1;

}

14.3%{

opacity1;

}

21.5%{

opacity;

}

}

@keyframes zoom {

28.5%{

transformscale(1.3);

}

}

Меню

Панель значковЗначок менюАккордеонВкладкиВертикальные вкладкиЗаголовки вкладокВкладки полной страницыВверх НавигацияОтзывчивый TopnavПанель поискаИсправлена ​​боковая панельБоковая навигацияПолноэкранная навигацияМеню Off-CanvasНаведение с помощью кнопокМеню горизонтальной прокруткиВертикальное менюНижняя навигацияОтзывчивый снимок NavСсылки на нижнюю границуСсылки справаЦентрированные ссылки менюИсправлено менюСлайд-шоу в прокруткеСкрыть Navbar в прокруткеПрикрепленное NavbarВыпадающие окна HoverНажмите «Раскрывающиеся окна»Раскрытие в ТопнавеРаспространение в СиденеОткроется панель NavbarDropupMega MenuпагинацияПанировочные сухариГруппа кнопокГруппа вертикальных кнопокВажная социальная панельОтзывчивый заголовок

Как создать слайдер с зацикливанием? — 1 версия

Зацикливание слайдов можно выполнить посредством трансформирования элементов .

Для этого необходимо к каждому элементу привязать значения его текущей позиции и трансформации.

Наиболее оптимально эти действия можно выполнить с помощью массива :

var _items = [];

// наполнение массива элементами .slider__item
_sliderItems.forEach(function (item, index) {
  _items.push({ item: item, position: index, transform: 0 });
});

Но связать данные с элементами можно выполнить не только посредством массива, а например, с помощью data-атрибутов. Но операции с DOM самые медленные и ресурсоёмкие, их не рекомендуется использовать, когда это можно выполнить как-то по-другому.

Следующий шаг — это создать функции для вычисления элементов с минимальной и максимальной позицией.

var position = {
  getItemMin: function () {
    var indexItem = 0;
    _items.forEach(function (item, index) {
      if (item.position < _items.position) {
        indexItem = index;`
      }
    });
    return indexItem;
  },
  getItemMax: function () {
    var indexItem = 0;
      _items.forEach(function (item, index) {
        if (item.position > _items.position) {
          indexItem = index;
        }
      });
    return indexItem;
  },
  getMin: function () {
    return _items.position;
  },
  getMax: function () {
    return _items.position;
  }
}
</pre>
<p><span class="font-weight-bold">Последний основной шаг</span>, который предстоит выполнить - это доработать функцию <code class="code">_transformItem</code>. А именно добавить к ней код, который будет изменять позицию элемента <code class="code">.slider__item</code> и выполнять его трансформацию.</p>
<pre class="prettyprint">
var _transformItem = function (direction) {
  var nextItem;
  if (direction === 'right') {
    _positionLeftItem++;
    if ((_positionLeftItem + _wrapperWidth / _itemWidth - 1) > position.getMax()) {
      nextItem = position.getItemMin();
      _items.position = position.getMax() + 1;
      _items.transform += _items.length * 100;
      _items.item.style.transform = 'translateX(' + _items.transform + '%)';
    }
    _transform -= _step;
  }
  if (direction === 'left') {
    _positionLeftItem--;
    if (_positionLeftItem < position.getMin()) {
      nextItem = position.getItemMax();
      _items.position = position.getMin() - 1;
      _items.transform -= _items.length * 100;
      _items.item.style.transform = 'translateX(' + _items.transform + '%)';
    }
    _transform += _step;
  }
  _sliderWrapper.style.transform = 'translateX(' + _transform + '%)';
}

На самом деле здесь всё просто.

Например, для того чтобы осуществить переход к следующему слайду сначала в массиве ищется элемент с позицией большей, чем у текущего крайнего правого элемента .

Если такой элемент в массиве есть, то выполняется трансформация элемента (т.е. действия, как и в алгоритме без зацикливания).

А вот если такого элемента нет, то кроме трансформации , выполняется ещё ряд действий. Во-первых, в массиве ищется элемент с минимальной позицией. После получения этого элемента, ему устанавливается позиция, значение которой будет равно значению текущего правого элемента + 1. Ну и конечно выполняется его трансформация, на такое количество процентов, чтобы он оказался в конце, т.е. после последнего элемента.

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

Кроме этого для слайдера с зацикливанием не нужно переключать видимость кнопок «Влево» и «Вправо». Данные кнопки в этой версии слайдера будут отображаться всегда.

Чтобы это выполнить необходимо:

  • удалить класс у элемента управления «Вправо»;
  • в CSS для селектора изменить значение свойства на .

Демо слайдера

Шаг 3. CSS для мобильных устройств

Мы начнем определять стили для мобильных устройств. Зададим основу дизайна, а затем добавим расширения шаблона для больших экранов. В тексте урока приводятся только основные свойства, полный код можно посмотреть в исходниках:

body {
  width: 90%;
  min-width: 300px;
  max-width: 1200px;
  margin: 0 auto;
  padding-top: 1em; 
  color: #504331
}

header {
  text-align: center;
  position: relative; }

h1 {
  font-size: 2.75em;
  background: white;
  display: inline-block;
  padding: 0 10px;
  margin-bottom: .25em; }

h1:after {
  content: "";
  height: 2px;
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: .5em;
  z-index: -1;
  border-top: 1px solid #504331;
  border-bottom: 1px solid #504331; }

.links {
  background: url(../images/map.png) bottom center no-repeat;
  padding-bottom: 177px; }

Упаковка JS карусели в единый скрипт

Всё, слайдер на JavaScript готов и подключен. Я лично рекомендую использовать данный вариант на практике, если он вам вообще пригодится

Для ускорения работы его, кстати, можете ещё дополнительно сжать статические компоненты: CSS, HTML и JavaScript файлы. Я не стал этого делать и предлагать вам минифицированный код, потому что систем сборок фронтэнда сейчас очень много: Gulp, Grunt, Webpack и другие. И у каждой из них свои алгоритмы сжатия и подключения файлов.

К тому же, минифицированные результаты на разных ОС могут работать по-разному. В общем, причин много.

Да и сами исходники у меня вышли, я считаю, не такие уж тяжеловесные, что нуждаются в данной процедуре. Но если же вам они будут необходимы, то настройте минификацию самостоятельно с учётом вашей ОС и сборщика.

Как я писал в самом начале, для решения поставленной мне изначально задачи нужно было получить единый JS файл для корректного использования моего слайдера через сторонний сервис на сайте. По этой причине я, собственно говоря, и не стал пользоваться готовыми сторонними библиотеками.

Так вот, в завершение своего сегодняшнего повествования я решил поделиться с вами финальной версией своей JavaScript карусели, которую я использовал на практике. Возможно, кому-то данный способ будет полезен. Он также пригодится тем, кто будет подключать предоставленную мною библиотеку через системы сборки Webpack, Gulp, Grunt и при этом столкнётся с проблемой правильности файловых путей.

Тогда вариант единого скрипта JavaScript карусели вам придётся как нельзя кстати, т.к. весь контент будет содержаться прямо в нём, в том числе и HTML/CSS код, который в случае библиотеки хранится в отдельных файлах.

Скрипт в моём случае состоит из двух частей. В первой части располагалось содержимое файла popupSlider.js, которое я второй раз не буду приводить. Вставьте его самостоятельно, убрав из кода класса описание метода loadStatic() и его вызов, т.к. они нам не понадобятся.

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

Там у нас будет происходить добавление на страницу HTML/CSS кода JS карусели и создание объекта класса Slider, что равносильно активации самого слайдера.

Схематично код выглядит следующим образом:

/* содержимое popupSlider.js без описания метода loadStatic() и его вызова */

document.addEventListener('DOMContentLoaded', function(){
    var str = '\
         <style>\
             /*css код*/
         </style>\
         /* html код */
         ';

    var div = document.createElement('div');
    div.innerHTML = str;
    document.body.appendChild(div);

    var aSlider = new Slider("#slider");

Поскольку в моём случае вариант загрузки файлов на сервер был вообще закрыт, мне пришлось загрузить файлы картинок элементов управления JavaScript каруселью на облако и вместо путей к ним в HTML и CSS коде прописать ссылки, сгенерированные при сохранении.

Если у вас таких сложностей нет, то можете ничего не менять, но не забыть скопировать каталоги slides и controls библиотеки на сервер и указать правильные пути к ним.

Настройка слайдера

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

Пример 1. Инициализация chiefSlider с одним активным слайдом (без зацикливания):

new ChiefSlider($slider, {
  loop: false // без зацикливания
});

Пример 2. Слайдер с одновременным отображением 3 слайдов на всех устройствах (без зацикливания):

<!-- Настройка в CSS -->
<style>
.slider__item {
  flex: 0 0 33.3333333333%; /* ширина слайда */
  max-width: 33.3333333333%;
}
</style>

<!-- JavaScript -->
<script>
  const $slider = document.querySelector('');
  new ChiefSlider($slider, {
    loop: false // без зацикливания
  });
</script>

Пример 3. С зацикливанием:

new ChiefSlider($slider, {
  loop: true // с зацикливанием (по умолчанию)
});

Пример 4. С автоматической сменой слайдов и индикаторами:

<div class="slider" data-slider="chiefslider">
  ...
  <!-- индикаторы -->
  <ol class="slider__indicators">
    <li data-slide-to="0"></li>
    <li data-slide-to="1"></li>
    <li data-slide-to="2"></li>
    <li data-slide-to="3"></li>
    <li data-slide-to="4"></li>
  </ol>
</div>
...

<script>
document.addEventListener('DOMContentLoaded', function() {
  // получаем корневой элемент слайдера
  const $slider = document.querySelector('');
  new ChiefSlider($slider, {
    loop: true,
    autoplay: true, // включение автоматической смены слайдов
    interval: 5000, // интервал в мс
  });
});
</script>

Пример 5. Использование слайдера для статей или постов (обновляющий своё состояние при изменении размеров окна браузера):

<style>
  /* ... */
  .slider__item {
    flex: 0 0 100%;
    max-width: 100%;
  }
  @media (min-width: 768px) {
    .slider__item {
      flex: 0 0 50%;
      max-width: 50%;
    }
  }
  @media (min-width: 1200px) {
    .slider__item {
      flex: 0 0 33.3333333333%;
      max-width: 33.3333333333%;
    }
  }
</style>

...

<script>
document.addEventListener('DOMContentLoaded', function() {
  // ...
  const slider = new ChiefSlider($slider, {
    loop: true,
    autoplay: true,
    interval: 5000,
    refresh: true, // обновление состояния при изменении размеров окна браузера
  });
});
</script>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector