Слайдер с меняющимися фото на css

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.

Группа кнопок

Если разместить две кнопки внутри списка, то дальше они будут рассматриваться как сгруппированные ненумерованные элементы. После того, как в добавлена поддержка , мы можем добавить вспомогательную групповую подпись «Контролы галереи». Так будет легче установить цель кнопок.

<ul aria-label="Контролы галереи">    <li>    <button id="previous" aria-label="Предыдущий">      <svg aria-hidden="true" focusable="false"><use xlink:href="#arrow-left"></use></svg>    </button>  </li>  <li>    <button id="next" aria-label="Следующий">      <svg aria-hidden="true" focusable="false"><use xlink:href="#arrow-right"/></svg>    </button>  </li></ul>

У каждой кнопки, конечно, должна быть собственная подпись, которая, в данном случае, так же задаётся при помощи . Когда пользователь скринридера столкнётся с первой кнопкой, он услышит что-то вроде: «Назад, кнопка, список, контролы галереи, два пункта».

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

instructions.parentNode.insertBefore(  controls, instructions.nextElementSibling);

Индикаторы загрузки

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

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

Чтобы раскладка не «подпрыгивала», когда изображения подгружаются (так как установлена высота ), мы можем вместо этого схитрить и отцентрировать индикатор загрузки для каждого слайда. Потом он будет скрыт загрузившейся картинкой.

Smart Slider 3

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

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

Основные особенности Smart Slider 3:

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

Пожалуй, это основные его особенности, но далеко не все.

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

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

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

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

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

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

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

Возможности современных слайдеров

Слайдеры появились и начали бурно развиваться по одной простой причине — современный интернет-пользователь предпочитает графическую информацию текстовой. Да, еще несколько лет назад в обиходе вебмастеров были сайты, сплошь наполненные блоками голого текста, практически без изображений. Но сейчас пользователей отпугивает контент такого формата. Максимум информации за минимум времени — таков девиз среднестатистического миллениала. Поэтому, хотя бы главная страница, уважающего себя ресурса, должна быть наполнена большим количеством графического контента с минимум текста. Наиболее удобным инструментом, призванным уплотнить объёмные медиафайлы без потери их зрелищности, и стал слайдер.

Его задачи:

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

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

Современные технологии позволяют безгранично расширять функционал слайдера — всё зависит лишь от вашего желания и потребностей. Изображения могут сменяться любым способом, который только можно себе вообразить — от классического до так называемого «аккордеона» и т.п. Вместо картинки или текста на слайде может быть видео. Также есть возможность оборудовать слайдеры таймером, поставить кнопки паузы и запуска слайд-шоу и многое другое.

HTML:

Для начало нам нужно сделать подходящий HTML файл.

XHTML

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

<!DOCTYPE html>

<html lang=»ru»>

<head>

<meta charset=»UTF-8″>

<title>Слайдер</title>

<link rel=»stylesheet»href=»style.css»>

</head>
<body>

<div class=»slides»>

<img src=»img/portrait-1462944_1280.jpg»class=»block»alt=»»>

<img src=»img/bled-1899264_1280.jpg»alt=»»>

<img src=»img/cat-1455468_1280.jpg»alt=»»>

<img src=»img/woman-1948939_1280.jpg»alt=»»>

<img src=»img/france-2773030_1280.jpg»alt=»»>

</div>

<button class=»btnRight»>Right</button>

<script src=»script.js»class=»btnRight»></script>

</body>
</html>

Объяснять досконально я не буду, так как, тут всё понятно и вы уже должны знать сам язык HTML, если уже разрабатываете на JavaScript, но скажу, что это контейнер который содержит в себе картинки.

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() лучше делать поближе к самому событию клика, главное, чтобы перед ним, а не после.

CSS:

.sl-container {
width: 100%;
height: 500px;
margin: 20px 0;
padding: 0;
font-family: ‘Roboto Condensed’, sans-serif;
font-size: 1em;
line-height: 1.5em;
color: #000;
position: relative;
}
.swipe {
position: relative;
width: 100%;
height: 100%;
background: #eee;
overflow: hidden;
}
.panel {
position: absolute;
width: 100%;
min-height: 100%;
top: 0;
left: 0;
padding: 20px;
}
.left {
left: -100%;
}
.right {
left: 100%;
}
.sl-info {
position: absolute;
width: 70%;
max-width: 500px;
bottom: 15%;
right: 5%;
pointer-events: none;
}
.inner {
position: relative;
padding: 0.5em 2em 1em;
background: #FFFFFF;
box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22);
}
.inner h3 {
font-size: 1.7em;
font-weight: normal;
color: #337AB7;
}
.inner p {
font-family: Verdana, sans-serif;
}
.sl-info:before {
content: «»;
position: absolute;
width: 65%;
height: 80%;
top: 0;
left: 0;
transform: translate(-10px, -10px);
background: #337AB7;
}
.sl-buttons {
position: absolute;
bottom: -50px;
right: 5%;
pointer-events: all;
}
.sl-buttons button {
transition: ease .4s;
}
.sl-buttons button svg {
margin: 10px 0;
}
.sl-buttons .btn-prev,
.sl-buttons .btn-next {
width: 60px;
height: 60px;
margin-left: 10px;
border: 2px solid #337AB7;
outline: none;
border-radius: 60px;
color: #FFFFFF;
background: #337AB7;
box-shadow: 0px 3px 15px 2px rgba(0,0,0,.5);
cursor: pointer;
}
.sl-buttons button:hover {
box-shadow: 0px 3px 30px 3px rgba(0,0,0,.5);
}
.sl-buttons button:disabled {
box-shadow: 0px 1px 5px 0px rgba(0,0,0,.5);
background: #BFE2FF;
cursor: default;
}
.optional {
width: 80%;
max-width: 680px;
margin: 6em auto;
padding: 2em 3em;
box-shadow:
0 3px 12px rgba(0,0,0,0.16),
0 3px 12px rgba(0,0,0,0.23);
}
@media (max-width: 620px) {
body {
font-size: 13px;
line-height: 1.5em;
}
.sl-info {
position: absolute;
width: 100%;
max-width: 100%;
bottom: 0;
right: 0;
}
.inner {
padding: .5em 1.5em;
box-shadow: none;
}
.sl-buttons {
display: none;
}
}

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

.sl-container {

width100%;

height500px;

margin20px;

padding;

font-family’Roboto Condensed’,sans-serif;

font-size1em;

line-height1.5em;

color#000;

positionrelative;

}

.swipe {

positionrelative;

width100%;

height100%;

background#eee;

overflowhidden;

}

.panel {

positionabsolute;

width100%;

min-height100%;

top;

left;

padding20px;

}

.left {

left-100%;

}

.right {

left100%;

}

.sl-info {

positionabsolute;

width70%;

max-width500px;

bottom15%;

right5%;

pointer-eventsnone;

}

.inner {

positionrelative;

padding0.5em2em1em;

background#FFFFFF;

box-shadow14px28pxrgba(0,0,0,0.25),10px10pxrgba(0,0,0,0.22);

}

.inner h3 {

font-size1.7em;

font-weightnormal;

color#337AB7;

}

.inner p {

font-familyVerdana,sans-serif;

}

.sl-info:before {

content»»;

positionabsolute;

width65%;

height80%;

top;

left;

transformtranslate(-10px,-10px);

background#337AB7;

}

.sl-buttons {

positionabsolute;

bottom-50px;

right5%;

pointer-eventsall;

}

.sl-buttons button {

transitionease.4s;

}

.sl-buttons button svg {

margin10px;

}
.sl-buttons .btn-prev,

.sl-buttons .btn-next {

width60px;

height60px;

margin-left10px;

border2pxsolid#337AB7;

outlinenone;

border-radius60px;

color#FFFFFF;

background#337AB7;

box-shadow0px3px15px2pxrgba(0,0,0,.5);

cursorpointer;

}

.sl-buttons button:hover {

box-shadow0px3px30px3pxrgba(0,0,0,.5);

}

.sl-buttons button:disabled {

box-shadow0px1px5px0pxrgba(0,0,0,.5);

background#BFE2FF;

cursordefault;

}

.optional {

width80%;

max-width680px;

margin6emauto;

padding2em3em;

box-shadow

3px12pxrgba(0,0,0,0.16),

3px12pxrgba(0,0,0,0.23);

}

@media (max-width: 620px) {

body {

font-size13px;

line-height1.5em;

}

.sl-info {

positionabsolute;

width100%;

max-width100%;

bottom;

right;

}

.inner {

padding.5em1.5em;

box-shadownone;

}

.sl-buttons {

displaynone;

}

}

Установка слайдера

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

  • добавления HTML разметки на страницу;
  • загрузки CSS и JavaScript файлов chiefSlider в папку своего проекта и подключение их к странице;
  • инициализация слайдера.

Пример:

<!-- chiefSlider CSS -->
<link rel="stylesheet" href="/assets/libs/chiefslider/chiefslider.css">
<!-- chiefSlider JavaScript -->
<script src="/assets/libs/chiefslider/chiefslider.js"></script>
<script>
// после готовности DOM
document.addEventListener('DOMContentLoaded', function() {
  // получаем корневой элемент слайдера
  const $slider = document.querySelector('');
  // выполняем инициализацию
  new ChiefSlider($slider);
});
</script>

Плагин MetaSlide

Наиболее распространённой CMS в Глобальной сети является WordPress, поэтому установку плагина стоит рассмотреть именно для неё. В качестве примера возьмём один из наиболее популярных слайдеров: MetaSlider.

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

  • Add-ons — ни что иное, как реклама платной версии данного расширения WordPress. Зайдя в эту вкладку, вы сможете ознакомиться со всеми преимуществами расширенной версии. Среди прочих откроются возможности создавать слайдеры из постов вашего блога или работать с видео.
  • MetaSlider — открывает настройки слайдера.

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

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

Что бы использовать полученный слайдер, выберете внутри редактора статей WordPress кнопку «Создать MetaSlider» (его логотип появится в редакторе, после установки плагина). Далее выбирайте необходимый из выпадающего списка. В нашем примере получится вот такой автоматический слайдер для сайта:

Меню

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

Comparison (Before/After) Sliders

  • Mario Duarte
  • August 14, 2017
  • HTML
  • CSS/SCSS
  • JavaScript/Babel (jquery.js)

About the code

A simple and clean image comparison slider, fully responsive and touch ready made with CSS and jQuery.

  • Matthew Steele
  • July 19, 2017
  • HTML
  • CSS/SCSS

About the code

Javascriptless Before/After Slider

A before and after slider with only html and css.

  • Huw Llewellyn
  • July 14, 2017

About the code

Before After Image Slider (Vanilla JS)

Vanilla JS, minimal, nice to look.
Made by Huw
July 3, 2017

download
demo and code

About the code

A «split-screen» slider element with JavaScript.

Demo Image: Before & After Slider Gallery With SVG Masks

Before & After Slider Gallery With SVG Masks

A little experiment for a before & after slider all inside a SVG. Masking makes it pretty simple. Since it’s all SVG, the images and captions scale nicely together. GreenSock’s Draggable and ThrowProps plugins were used for the slider control.
Made by Craig Roblewsky
April 17, 2017

download
demo and code

Demo Image: HTML5 Before & After Comparison Slider

HTML5 Before & After Comparison Slider

Uses customised range input for slider.
Made by Dudley Storey
October 14, 2016

download
demo and code

Demo Image: Responsive Image Comparison Slider

Responsive image comparison slider with HTML, CSS and JavaScript.
Made by Ege Görgülü
August 3, 2016

download
demo and code

Demo Image: HTML5 Video Before-and-After Comparison Slider

HTML5 Video Before-and-After Comparison Slider

HTML5, CSS3 and JavaScript video before-and-after comparison slider.
Made by Dudley Storey
April 24, 2016

download
demo and code

Demo Image: Image Comparison Slider

download
demo and code

HTML:

<div class=»sl-container»>
<div class=»swipe»>
<div class=»panel» data-img=»/photo-1.jpg»></div>
<div class=»panel» data-img=»/photo-2.jpg»></div>
<div class=»panel» data-img=»/photo-3.jpg»></div>
<div class=»panel» data-img=»/photo-4.jpg»></div>
<div class=»panel» data-img=»/photo-5.jpg»></div>
</div>
<div class=»sl-info»>
<div class=»inner»>
<h3>Слайдер с фиксированным текстом</h3>
<p>Текст накладывается на слайдер, в котором листаются только фотографии</p>
</div>
<div class=»sl-buttons»>
<button class=»btn-prev» disabled>
<svg xmlns=»http://www.w3.org/2000/svg» width=»40″ height=»40″ viewBox=»0 0 24 24″ fill=»none» stroke=»#fff» stroke-width=»3″ stroke-linecap=»round» stroke-linejoin=»round»><polyline points=»15 18 9 12 15 6″></polyline></svg>
</button>
<button class=»btn-next»>
<svg xmlns=»http://www.w3.org/2000/svg» width=»40″ height=»40″ viewBox=»0 0 24 24″ fill=»none» stroke=»#fff» stroke-width=»3″ stroke-linecap=»round» stroke-linejoin=»round»><polyline points=»9 18 15 12 9 6″></polyline></svg>
</button>
</div>
</div>
</div>

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

<div class=»sl-container»>

<div class=»swipe»>

<div class=»panel»data-img=»/photo-1.jpg»></div>

<div class=»panel»data-img=»/photo-2.jpg»></div>

<div class=»panel»data-img=»/photo-3.jpg»></div>

<div class=»panel»data-img=»/photo-4.jpg»></div>

<div class=»panel»data-img=»/photo-5.jpg»></div>

</div>

<div class=»sl-info»>

<div class=»inner»>

<h3>Слайдер с фиксированным текстом</h3>

<p>Текст накладывается на слайдер, в котором листаются только фотографии</p>

</div>

<div class=»sl-buttons»>

<button class=»btn-prev»disabled>

<svg xmlns=»http://www.w3.org/2000/svg»width=»40″height=»40″viewBox=»0 0 24 24″fill=»none»stroke=»#fff»stroke-width=»3″stroke-linecap=»round»stroke-linejoin=»round»><polyline points=»15 18 9 12 15 6″></polyline></svg>

</button>

<button class=»btn-next»>

<svg xmlns=»http://www.w3.org/2000/svg»width=»40″height=»40″viewBox=»0 0 24 24″fill=»none»stroke=»#fff»stroke-width=»3″stroke-linecap=»round»stroke-linejoin=»round»><polyline points=»9 18 15 12 9 6″></polyline></svg>

</button>

</div>

</div>

</div>

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

Если на сайте адаптивная верстка, то слайдер можно подстроить под ширину экрана. Для этого используйте свойство «responsive». Оно позволяет установить для разных разрешений индивидуальные настройки. Рассмотрим пример.

$('.slick-example').slick({
	infinite: true,
	dots: true,
	slidesToShow: 3,
	slidesToScroll: 1,
	responsive: 
});

Здесь по умолчанию устанавливается отображение в ряд 3 слайда. Если ширина видимой области браузера от 768 до 481 пикселя — 2. И один, если ширина менее 480 пикселей.

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

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);

}

}

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

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

Adblock
detector