Делаем простой слайдер на jQuery. Делаем простой слайдер на jQuery Адаптивный слайдер для WordPress

В этой статье рассмотрим процесс создания легкого, простого и адаптивного слайдера для сайта с помощью CSS и JavaScript.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры использования слайдера для ротации различной информации

Применение слайдера для ротации изображений:


Использования слайдера для ротации текстовой информации:


Пример использования слайдера для отображения отзывов:


Применение слайдера для ротации товаров:


Описание исходных кодов слайдера и принципа его работы

Исходные коды слайдера состоят из:

  • html кода;
  • CSS кода (стилей);
  • JavaScript кода (скрипта).

HTML структура слайдера:

...
...
...
...

В этой разметке основным контейнером, содержащим остальной код слайдера, является элемент div с классом slider . Внутри него находятся три элемента: обёртка для слайдов.slider__wrapper , кнопки для перехода к предыдущему и следующему слайду.slider__control . Кроме этого после вызова функции слайдера в этот блок ещё динамически добавляется элемент с индикаторами.slider__indicators .

Обёртка для слайдов.slider__wrapper содержит в себе элемент.slider__items , а он в свою очередь элементы.slider__item . Такая конструкция позволит при необходимости расположить индикаторы и элементы управления как внутри слайдов, так и за их пределами.

В этом примере слайдер состоит из 4 элементов.slider__item . Эти элементы визуально представляют собой слайды.

Блок с индикаторами.slider__indicators выполнен в виде нумерованного списка. Он состоит из элементов li с атрибутом data-slide-to . Количество элементов в списке определяется числом слайдов. Данный атрибут используется для определения индекса слайда, на которой нужно перейти при нажатии на данный индикатор. В слайдере активный индикатор отмечается с помощью добавления к нему класса active .

Кнопки «назад» и «вперед» размечены с помощью элемента a . Кнопка для перехода к предыдущему слайду имеет классы slider__control и slider__control_prev , а к следующему – slider__control и slider__control_next .


Стили слайдера:

/* стили основного контейнера слайдера */ .slider { position: relative; overflow: hidden; max-width: 600px; margin-left: auto; margin-right: auto; } /* стили для обёртки, в которой заключены слайды */ .slider__wrapper { position: relative; overflow: hidden; } /* стили для контейнера слайдов */ .slider__items { display: flex; transition: transform 0.7s ease; } /* стили для слайдов */ .slider__item { flex: 0 0 100%; max-width: 100%; } /* стили для кнопок "вперед" и "назад" */ .slider__control { position: absolute; top: 50%; display: none; align-items: center; justify-content: center; width: 40px; color: #fff; text-align: center; opacity: 0.5; height: 50px; transform: translateY(-50%); background: rgba(0, 0, 0, 0.5); } .slider__control_show { display: flex; } .slider__control:hover, .slider__control:focus { color: #fff; text-decoration: none; outline: 0; opacity: 0.9; } .slider__control_prev { left: 0; } .slider__control_next { right: 0; } .slider__control::before { content: ""; display: inline-block; width: 20px; height: 20px; background: transparent no-repeat center center; background-size: 100% 100%; } .slider__control_prev::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 8 8"%3E%3Cpath d="M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z"/%3E%3C/svg%3E"); } .slider__control_next::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 8 8"%3E%3Cpath d="M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z"/%3E%3C/svg%3E"); } /* стили для индикаторов */ .slider__indicators { position: absolute; right: 0; bottom: 10px; left: 0; z-index: 15; display: flex; justify-content: center; padding-left: 0; margin-right: 15%; margin-left: 15%; list-style: none; margin-top: 0; margin-bottom: 0; } .slider__indicators li { box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 4px; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: rgba(255, 255, 255, 0.5); background-clip: padding-box; border-top: 10px solid transparent; border-bottom: 10px solid transparent; } .slider__indicators li.active { background-color: #fff; }

В слайдере в некоторый момент времени пользователю всегда показывается только один слайд. Осуществляется это посредством скрытия всех элементов (слайдов) располагающихся за пределами области внутри.slider__wrapper . В CSS это осуществляется посредством установки.slider__wrapper свойства overflow со значением hidden .

Slider__wrapper { overflow: hidden; }

Переход от одного слайда к другому осуществляется посредством CSS трансформаций. Для этого к.slider__items посредством кода JavaScript добавляется CSS свойство transform , значение которого содержит функцию translateX с определённым значением. Например, если данной функции указать в качестве значения -100%, то браузер осуществит переход к следующему слайду, а если наоборот, 100% - то к предыдущему.


Время и скорость, с которой будет осуществляться трансформация определяется с помощью CSS свойства transition:

Slider__items { transition: transform 0.7s ease; }

Логика работы слайдера:

"use strict"; var slideShow = (function () { return function (selector, config) { var _slider = document.querySelector(selector), // основный элемент блока _sliderContainer = _slider.querySelector(".slider__items"), // контейнер для.slider-item _sliderItems = _slider.querySelectorAll(".slider__item"), // коллекция.slider-item _sliderControls = _slider.querySelectorAll(".slider__control"), // элементы управления _currentPosition = 0, // позиция левого активного элемента _transformValue = 0, // значение транфсофрмации.slider_wrapper _transformStep = 100, // величина шага (для трансформации) _itemsArray = , // массив элементов _timerId, _indicatorItems, _indicatorIndex = 0, _indicatorIndexMax = _sliderItems.length - 1, _stepTouch = 50, _config = { isAutoplay: false, // автоматическая смена слайдов directionAutoplay: "next", // направление смены слайдов delayAutoplay: 5000, // интервал между автоматической сменой слайдов isPauseOnHover: true // устанавливать ли паузу при поднесении курсора к слайдеру }; // настройка конфигурации слайдера в зависимости от полученных ключей for (var key in config) { if (key in _config) { _config = config; } } // наполнение массива _itemsArray for (var i = 0, length = _sliderItems.length; i < length; i++) { _itemsArray.push({ item: _sliderItems[i], position: i, transform: 0 }); } // переменная position содержит методы с помощью которой можно получить минимальный и максимальный индекс элемента, а также соответствующему этому индексу позицию var position = { getItemIndex: function (mode) { var index = 0; for (var i = 0, length = _itemsArray.length; i < length; i++) { if ((_itemsArray[i].position < _itemsArray.position && mode === "min") || (_itemsArray[i].position > _itemsArray.position && mode === "max")) { index = i; } } return index; }, getItemPosition: function (mode) { return _itemsArray.position; } }; // функция, выполняющая смену слайда в указанном направлении var _move = function (direction) { var nextItem, currentIndicator = _indicatorIndex;; if (direction === "next") { _currentPosition++; if (_currentPosition > position.getItemPosition("max")) { nextItem = position.getItemIndex("min"); _itemsArray.position = position.getItemPosition("max") + 1; _itemsArray.transform += _itemsArray.length * 100; _itemsArray.item.style.transform = "translateX(" + _itemsArray.transform + "%)"; } _transformValue -= _transformStep; _indicatorIndex = _indicatorIndex + 1; if (_indicatorIndex > _indicatorIndexMax) { _indicatorIndex = 0; } } else { _currentPosition--; if (_currentPosition < position.getItemPosition("min")) { nextItem = position.getItemIndex("max"); _itemsArray.position = position.getItemPosition("min") - 1; _itemsArray.transform -= _itemsArray.length * 100; _itemsArray.item.style.transform = "translateX(" + _itemsArray.transform + "%)"; } _transformValue += _transformStep; _indicatorIndex = _indicatorIndex - 1; if (_indicatorIndex < 0) { _indicatorIndex = _indicatorIndexMax; } } _sliderContainer.style.transform = "translateX(" + _transformValue + "%)"; _indicatorItems.classList.remove("active"); _indicatorItems[_indicatorIndex].classList.add("active"); }; // функция, осуществляющая переход к слайду по его порядковому номеру var _moveTo = function (index) { var i = 0, direction = (index > _indicatorIndex) ? "next" : "prev"; while (index !== _indicatorIndex && i <= _indicatorIndexMax) { _move(direction); i++; } }; // функция для запуска автоматической смены слайдов через промежутки времени var _startAutoplay = function () { if (!_config.isAutoplay) { return; } _stopAutoplay(); _timerId = setInterval(function () { _move(_config.directionAutoplay); }, _config.delayAutoplay); }; // функция, отключающая автоматическую смену слайдов var _stopAutoplay = function () { clearInterval(_timerId); }; // функция, добавляющая индикаторы к слайдеру var _addIndicators = function () { var indicatorsContainer = document.createElement("ol"); indicatorsContainer.classList.add("slider__indicators"); for (var i = 0, length = _sliderItems.length; i < length; i++) { var sliderIndicatorsItem = document.createElement("li"); if (i === 0) { sliderIndicatorsItem.classList.add("active"); } sliderIndicatorsItem.setAttribute("data-slide-to", i); indicatorsContainer.appendChild(sliderIndicatorsItem); } _slider.appendChild(indicatorsContainer); _indicatorItems = _slider.querySelectorAll(".slider__indicators > li") }; var _isTouchDevice = function () { return !!("ontouchstart" in window || navigator.maxTouchPoints); }; // функция, осуществляющая установку обработчиков для событий var _setUpListeners = function () { var _startX = 0; if (_isTouchDevice()) { _slider.addEventListener("touchstart", function (e) { _startX = e.changedTouches.clientX; _startAutoplay(); }); _slider.addEventListener("touchend", function (e) { var _endX = e.changedTouches.clientX, _deltaX = _endX - _startX; if (_deltaX > _stepTouch) { _move("prev"); } else if (_deltaX < -_stepTouch) { _move("next"); } _startAutoplay(); }); } else { for (var i = 0, length = _sliderControls.length; i < length; i++) { _sliderControls[i].classList.add("slider__control_show"); } } _slider.addEventListener("click", function (e) { if (e.target.classList.contains("slider__control")) { e.preventDefault(); _move(e.target.classList.contains("slider__control_next") ? "next" : "prev"); _startAutoplay(); } else if (e.target.getAttribute("data-slide-to")) { e.preventDefault(); _moveTo(parseInt(e.target.getAttribute("data-slide-to"))); _startAutoplay(); } }); document.addEventListener("visibilitychange", function () { if (document.visibilityState === "hidden") { _stopAutoplay(); } else { _startAutoplay(); } }, false); if (_config.isPauseOnHover && _config.isAutoplay) { _slider.addEventListener("mouseenter", function () { _stopAutoplay(); }); _slider.addEventListener("mouseleave", function () { _startAutoplay(); }); } }; // добавляем индикаторы к слайдеру _addIndicators(); // установливаем обработчики для событий _setUpListeners(); // запускаем автоматическую смену слайдов, если установлен соответствующий ключ _startAutoplay(); return { // метод слайдера для перехода к следующему слайду next: function () { _move("next"); }, // метод слайдера для перехода к предыдущему слайду left: function () { _move("prev"); }, // метод отключающий автоматическую смену слайдов stop: function () { _config.isAutoplay = false; _stopAutoplay(); }, // метод запускающий автоматическую смену слайдов cycle: function () { _config.isAutoplay = true; _startAutoplay(); } } } }()); slideShow(".slider", { isAutoplay: true });

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

Основные функции, выполняющие всю логику, используемые внутри модуля slideShow:

  • _startAutoplay – функция для запуска автоматической смены слайдов через определённые промежутки времени определяемым параметром delayAutoplay (по умолчанию 5 секунд);
  • _stopAutoplay – функция, отключающая автоматическую смену слайдов;
  • _move – функция, выполняющая смену слайда в указанном направлении;
  • _slideTo – функция, осуществляющая переход к слайду по его порядковому номеру; она используется при обработке события «click» на индикаторах;
  • _addIndicators – функция, добавляющая индикаторы к слайдеру;
  • _setupListener – функция, осуществляющая установку обработчиков для событий для слайдера.

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

Здравствуйте, дорогие читатели блога. Сегодня представляю Вам полезную подборку бесплатных JQuery слайдеров с примерами . Если Вы всё таки надумали поставить слайдер изображений на свой ресурс, эта подборка Вам очень пригодится, и, поверьте, вам есть с чего выбрать. Тем более все слайдеры с примерами, и каждый из них Вы сможете попробовать в действии. В общем не буду отвлекать, выбирайте:-)

Простой JQuery слайдер изображений

Самый обычный и не большой слайдер миниатюр на Вашем сайте.

Слайдер с миниатюрами на JQuery

Очень простой и интересный слайдер с миниатюрами, который подойдёт практически для любого дизайна.

Красивый слайдер для сайта

Большой и очень красивый слайдер изображений, с интересным перелистыванием текста.

Обычный JQuery слайдер

Самый обычный и простой слайдер на Ваш ресурс

Большой слайдер с описанием

Эффектный слайдер мимо которого нереально пройти.

JQuery слайдер картинок и описанием

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

Скроллинг изображений с подсказками

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

JQuery слайдер с большими стрелками

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

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

timeList - скорость переключения слайда

TimeView - время показа

RadioBut - кнопки под слайдом, для быстрой навигации (radio buttons). По умолчанию true может принимать значение false .

А теперь давайте приступим! Создадим и откроем файл index.htm

Заголовок 1

Описание...

Заголовок 2

Описание...

Заголовок 3

Описание...

Заголовок 4

Описание...

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

.

В представленном коде как мы видим ничего сложного нет, slider-wrap определяет общее положение слайдера и выравнивает его по середине экрана. Параметр slider позиционирует, и задает высоту нашего слайда свойством height . Если будете использовать слайдер картинок, то укажите высоту картинок в данном свойстве, если высота картинок разная, то укажите максимальную.

Для наилучшей визуализации слайдера и привлекательности используйте одинаковое разрешение картинок.

Теперь нам необходимо стилизовать наш слайдер. Стрелки вперед/назад для переключения слайдов, а также радио кнопки под слайдером, использованы в виде картинок и прилагаются вместе с файлом. Создадим и откроем файл style.css и пропишем туда нужную нам разметку:

@import url("https://fonts.googleapis.com/css?family=Open+Sans|Roboto"); html, body { height: 100%; } body { color: #4f4f5a; font-family: "Roboto", sans-serif; font-size: 16px; padding: 0; margin: 0; } #slider-wrap { max-width:650px; margin: 100px auto; } #slider { position:relative; height: 200px; overflow: hidden; border:#fafafa solid 10px; } .slide { width:100%; height: 100%; position: absolute; top: 0; left: 0; text-align: center; padding-top: 40px; } .Radio-But { margin-top:10px; text-align:center; } .Radio-But .ctrl-select { display: inline-block; width: 16px; height: 16px; background: url("radioBg.png") center bottom no-repeat; margin: 2px; overflow: hidden; text-indent: -99999px; } .Radio-But .ctrl-select:hover { cursor: pointer; background-position: center center; } .Radio-But .ctrl-select.active{ background-position: center top; } #prewBut, #nextBut{ display: block; width: 40px; height: 100%; position: absolute; top: 0; overflow: hidden; text-indent: -99999px; background: url("arrowBg.png") left center no-repeat; opacity: 0.5; z-index: 3; outline: none !important; } #prewBut { left: 10px; } #nextBut { right: 10px; background: url("arrowBg.png") right center no-repeat; } #prewBut:hover, #nextBut:hover { opacity: 1; }

Если стрелочки вперед/назад мешают видимости вашего слайдера их можно сделать невидимыми, а появляться они будут, лишь при наведении на них. В параметрах prewBut и nextBut , задайте свойству opacity значение 0.

Создадим и откроем наш js-файл , в котором и будет код слайдера. Не забудьте подключить фреймворк jQuery, а также библиотеку jquery.ui - указанная библиотека нам необходима для того, чтобы задать элемент исчезновения и появление слайда. Заменить указанный эффект можно свойством fadeIn и fadeOut .

$(document).ready(function () { var timeList = 300; var TimeView = 5000; var RadioBut = true; $(".slide").hide().eq(0).show(); var slideNum = 0; var slideTime; slideCount = $("#slider .slide").length; var animSlide = function(arrow){ clearTimeout(slideTime); function slideDirectionHide(slideFloatNum, directTo){ $(".slide").eq(slideFloatNum).fadeOut(timeList); } function slideDirectionShow(slideFloatNum, directTo, pause){ $(".slide").eq(slideFloatNum).fadeIn(timeList, function() { if(pause == true) { rotator(); } }); } var old_slideNum = slideNum; if(arrow == "next"){ slideDirectionHide(slideNum, "left"); if(slideNum == (slideCount-1)){slideNum=0;} else{slideNum++} slideDirectionShow(slideNum, "right", true); } else if(arrow == "prew") { slideDirectionHide(slideNum, "right"); if(slideNum == 0){slideNum=slideCount-1;} else{slideNum-=1} slideDirectionShow(slideNum, "left", true); }else{ if(arrow !== old_slideNum) { if(arrow > old_slideNum) { slideDirectionHide(slideNum, "left"); slideNum = arrow; slideDirectionShow(slideNum, "right", true); }else if(arrow < old_slideNum) { slideDirectionHide(slideNum, "right"); slideNum = arrow; slideDirectionShow(slideNum, "left", true); } } } $(".ctrl-select.active").removeClass("active"); $(".ctrl-select").eq(slideNum).addClass("active"); } if(RadioBut){ var linkArrow = $("<>") .prependTo("#slider"); $("#nextBut").click(function(){ animSlide("next"); return false; }) $("#prewBut").click(function(){ animSlide("prew"); return false; }) } var addSpan =""; $(".slide").each(function(index) { addSpan += "" + index + ""; }); $("

" + addSpan +"
").appendTo("#slider-wrap"); $(".ctrl-select:first").addClass("active"); $(".ctrl-select").click(function(){ var goToNum = parseFloat($(this).text()); animSlide(goToNum); }); var pause = false; var rotator = function(){ if(!pause){slideTime = setTimeout(function(){animSlide("next")}, TimeView);} } $("#slider-wrap").hover(function(){clearTimeout(slideTime); pause = true;}, function(){pause = false; rotator(); }); var clicking = false; var prevX; $(".slide").mousedown(function(e){ clicking = true; prevX = e.clientX; }); $(".slide").mouseup(function() { clicking = false; }); $(document).mouseup(function(){ clicking = false; }); $(".slide").mousemove(function(e){ if(clicking == true) { if(e.clientX < prevX) { animSlide("next"); clearTimeout(slideTime); } if(e.clientX > prevX) { animSlide("prew"); clearTimeout(slideTime); } clicking = false; } }); $(".slide").hover().css("cursor", "pointer"); rotator(); });

Функция animSlide принимает три вида значений: next , prew , и числовое значение. Параметр next переключает следующий слайд, prew предыдущий, а числовое значение это конкретно выбранный слайд через радио кнопки под слайдом. Функции slideDirectionHide и slideDirectionShow почти схожи и идентичны, первая отвечает за исчезновение слайда и направление движения уходящего слайда, вторая за появление слайда, его направление движения при появлении, а также за заданный интервал времени показа.

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

На этом все, если что-то не понятно или возникли вопросы, пишите и спрашивайте.

В этой статье разберём как можно очень просто с помощью CSS Flexbox и CSS трансформаций создать адаптивный слайдер для сайта.

Исходные коды и демо слайдера

Проект слайдера под названием chiefSlider расположен на GitHub. Перейти на него можно по этой ссылке .

Слайдер с одним активным слайдом (без зацикливания):

Слайдер с тремя активными слайдами (без зацикливания):





Пример, в котором показан как можно применить слайдер для ротации статей:



Преимущества слайдера chiefSlider

Перечислим основные преимущества данного слайдера:

  • во-первых, он не создаёт клоны элементов (item) для организации зацикливания, как это реализовано, например, в плагинах OwlCarousel и slick ;
  • во-вторых, он не зависит от библиотеки jQuery ; это не только убирает дополнительные требования, но и делает его более лёгким;
  • в-третьих, он практически не вносит никакие изменения в DOM документа ; единственное, что он делает - это добавляет или изменяет значения CSS трансформаций у элементов слайдера;
  • в-четвертых, он содержит только минимальный набор функций ; дополнительный функционал можно добавить в зависимости от задачи;
  • в-пятых, он является адаптивным , т.е. его можно использовать на любых сайтах; адаптивность слайдера настраивается с помощью CSS;
  • в-шестых, количество активных элементов настраивается с помощью CSS; это означает, что его можно использовать для создания карусели как с одним активным слайдом, так и с любым другим их количеством.

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

Установка слайдера выполняется за 3 шага:

  • добавить CSS слайдера chiefSlider на страницу или в CSS-файл, подключённый к странице;
  • поместить HTML код слайдера в необходимое место страницы;
  • вставить JavaScript код на страницу или в js-файл, подключённый к странице.

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

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

Создание слайдера chiefSlider будет состоять из создания HTML кода, CSS и JavaScript (без jQuery).

HTML код слайдера chiefSlider :

Как видно, слайдер имеет очень простую HTML архитектуру. Начинается она с основного блока, который имеет класс slider . Данный блок состоит из 3 элементов.

Первый элемент - это.slider__wrapper . Он выступает в качестве обёртки для элементов.slider__item (слайдов).

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

CSS код слайдера chiefSlider :

/* ОСНОВНЫЕ СТИЛИ */ .slider { position: relative; overflow: hidden; } .slider__wrapper { display: flex; transition: transform 0.6s ease; /* 0.6 длительность смены слайда в секундах */ } .slider__item { flex: 0 0 50%; /* определяет количество активных слайдов (в данном случае 2 */ max-width: 50%; /* определяет количество активных слайдов (в данном случае 2 */ } /* СТИЛИ ДЛЯ КНОПОК "НАЗАД" И "ВПЕРЁД" */ .slider__control { position: absolute; display: none; top: 50%; transform: translateY(-50%); align-items: center; justify-content: center; text-align: center; width: 40px; /* ширина кнопки */ height: 50px; /* высота кнопки */ opacity: .5; /* прозрачность */ background: #000; /* цвет фона */ } .slider__control_show { display: flex; } .slider__control:hover, .slider__control:focus { text-decoration: none; outline: 0; opacity: .9; /* прозрачность */ } .slider__control_left { left: 0; } .slider__control_right { right: 0; } .slider__control::before { content: ""; display: inline-block; width: 20px; /* ширина иконки (стрелочки) */ height: 20px; /* высота иконки (стрелочки) */ background: transparent no-repeat center center; background-size: 100% 100%; } .slider__control_left::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 8 8"%3E%3Cpath d="M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z"/%3E%3C/svg%3E"); } .slider__control_right::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 8 8"%3E%3Cpath d="M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z"/%3E%3C/svg%3E"); }

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

CSS код, который определяет количество активных элементов :

/* определяет количество активных слайдов (в данном случае 2) */ flex: 0 0 50%; max-width: 50%;

Этот код устанавливает слайдеру число активных элементов, равное 2.

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

/* определяет количество активных слайдов (в данном случае 1) */ flex: 0 0 100%; max-width: 100%;

Создание адаптивного слайдера осуществляется посредством медиа запросов.

Например , слайдер, который на устройствах с крохотным экраном должен иметь один активный слайд, а на больших - четыре:

Slider__item { flex: 0 0 100%; max-width: 100%; } @media (min-width: 980px) { .slider__item { flex: 0 0 25%; max-width: 25%; } }

JavaScript код слайдера chiefSlider :

"use strict"; var multiItemSlider = (function () { return function (selector) { var _mainElement = document.querySelector(selector), // основный элемент блока _sliderWrapper = _mainElement.querySelector(".slider__wrapper"), // обертка для.slider-item _sliderItems = _mainElement.querySelectorAll(".slider__item"), // элементы (.slider-item) _sliderControls = _mainElement.querySelectorAll(".slider__control"), // элементы управления _sliderControlLeft = _mainElement.querySelector(".slider__control_left"), // кнопка "LEFT" _sliderControlRight = _mainElement.querySelector(".slider__control_right"), // кнопка "RIGHT" _wrapperWidth = parseFloat(getComputedStyle(_sliderWrapper).width), // ширина обёртки _itemWidth = parseFloat(getComputedStyle(_sliderItems).width), // ширина одного элемента _positionLeftItem = 0, // позиция левого активного элемента _transform = 0, // значение трансформации.slider_wrapper _step = _itemWidth / _wrapperWidth * 100, // величина шага (для трансформации) _items = ; // массив элементов // наполнение массива _items _sliderItems.forEach(function (item, index) { _items.push({ item: item, position: index, transform: 0 }); }); var position = { getMin: 0, getMax: _items.length - 1, } var _transformItem = function (direction) { if (direction === "right") { if ((_positionLeftItem + _wrapperWidth / _itemWidth - 1) >= position.getMax) { return; } if (!_sliderControlLeft.classList.contains("slider__control_show")) { _sliderControlLeft.classList.add("slider__control_show"); } if (_sliderControlRight.classList.contains("slider__control_show") && (_positionLeftItem + _wrapperWidth / _itemWidth) >= position.getMax) { _sliderControlRight.classList.remove("slider__control_show"); } _positionLeftItem++; _transform -= _step; } if (direction === "left") { if (_positionLeftItem <= position.getMin) { return; } if (!_sliderControlRight.classList.contains("slider__control_show")) { _sliderControlRight.classList.add("slider__control_show"); } if (_sliderControlLeft.classList.contains("slider__control_show") && _positionLeftItem - 1 <= position.getMin) { _sliderControlLeft.classList.remove("slider__control_show"); } _positionLeftItem--; _transform += _step; } _sliderWrapper.style.transform = "translateX(" + _transform + "%)"; } // обработчик события click для кнопок "назад" и "вперед" var _controlClick = function (e) { if (e.target.classList.contains("slider__control")) { e.preventDefault(); var direction = e.target.classList.contains("slider__control_right") ? "right" : "left"; _transformItem(direction); } }; var _setUpListeners = function () { // добавление к кнопкам "назад" и "вперед" обработчика _controlClick для события click _sliderControls.forEach(function (item) { item.addEventListener("click", _controlClick); }); } // инициализация _setUpListeners(); return { right: function () { // метод right _transformItem("right"); }, left: function () { // метод left _transformItem("left"); } } } }());

Основное действие в коде JavaScript выполняет функция _transformItem . Эта функция в зависимости от переданного ей направления выполняет трансформирование элемента.slider__wrapper .

Инициализация слайдера осуществляется следующим образом:

Var slider = multiItemSlider(".slider") Демо слайдера

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

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

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

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

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

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

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

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

Последний основной шаг, который предстоит выполнить - это доработать функцию _transformItem. А именно добавить к ней код, который будет изменять позицию элемента .slider__item и выполнять его трансформацию.

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 + "%)";
}

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

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

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

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


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


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

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

  • удалить класс slider__control_show у элемента управления "Вправо";
  • в CSS для селектора.slider__control изменить значение свойства display на flex .
Демо слайдера

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

Запрограммировать автоматическую смену слайдов через определённые промежутки времени можно с помощью функции setInterval .

Var _cycle = function (direction) { if (!_config.isCycling) { return; } _interval = setInterval(function () { _transformItem(direction); }, _config.interval); }

Функция setInterval в этом примере будет запускать функцию _transformItem через определённые интервалы времени, равные значению переменой _config.interval .

Кроме этого остановку автоматической смены слайдов желательно ещё добавить при поднесении курсора к слайдеру.

Осуществить этот функционал можно следующим образом:

If (_config.pause && _config.isCycling) { _mainElement.addEventListener("mouseenter", function () { clearInterval(_interval); }); _mainElement.addEventListener("mouseleave", function () { clearInterval(_interval); _cycle(_config.direction); }); }

Как остановить автоматическую смену слайдов, если элемент не виден пользователю?

Отключить автоматическую смену слайдов целесообразно в двух случаях:

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

Обработку первого случая можно осуществить с помощью события visibilitychange .

Document.addEventListener("visibilitychange", _handleVisibilityChange, false);

Функция для обработчика события visibilitychange:

// обработка события "Изменения видимости документа" var _handleVisibilityChange = function () { if (document.visibilityState === "hidden") { clearInterval(_interval); } else { clearInterval(_interval); _cycle(_config.direction); } }

Вычисление видимости элемента можно организовать с помощью функции _isElementVisible:

Function _isElementVisible(element) { var rect = element.getBoundingClientRect(), vWidth = window.innerWidth || doc.documentElement.clientWidth, vHeight = window.innerHeight || doc.documentElement.clientHeight, elemFromPoint = function (x, y) { return document.elementFromPoint(x, y); }; if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) { return false; } return (element.contains(elemFromPoint(rect.left, rect.top)) || element.contains(elemFromPoint(rect.right, rect.top)) || element.contains(elemFromPoint(rect.right, rect.bottom)) || element.contains(elemFromPoint(rect.left, rect.bottom))); }

Поместить вызов _isElementVisible можно, например, в начало функции _transformItem . Это действие позволит отменить автоматическую смену слайдов, если слайдер в данный момент находится вне viewport .

Var _transformItem = function (direction) { var nextItem; if (!_isElementVisible(_mainElement)) { return; } //...

Слайдер, реагирующий на изменение размеров окна браузера

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

Реализовано это с помощью использования события resize и массива _states . Массив используется для вычислений. Его применение позволит не выполнять переинициализацию слайдера, когда это не требуется.

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

Иногда слайдер должен занимать одну треть страницы сайта. Здесь слайдер — карусель используется с эффектами переходов и с адаптивными макетами. Сайты электронной коммерции используют слайдер – карусель для демонстрации множества фото в отдельных публикациях или страницах. Код слайдера можно свободно использовать и изменять его в соответствии с потребностями.

Используя JQuery совместно с HTML5 и CSS3 , можно сделать ваши страницы более интересными, снабдив их уникальными эффектами, и обратить внимание посетителей на конкретную область сайта.

Slick – плагин современного слайдера — карусели

Slick – свободно распространяемый jquery – плагин, разработчики которого утверждают, что их решение удовлетворит все ваши требования к слайдеру. Адаптивный слайдер – карусель может работать в режиме «плитки » для мобильных устройств, и, в режиме «перетаскивания » для десктопной версии.

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

Демо-режим | Скачать

Owl Carousel 2.0 – jQuery — плагин с возможностью использования на сенсорных устройствах

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

Слайдер имеет в своем составе некоторые встроенные плагины для улучшения общего функционала. Анимация, проигрывание видео, автозапуск слайдера, ленивая загрузка, автоматическая корректировка высоты – основные возможности Owl Carousel 2.0 .

Поддержка возможности drag and drop включена для более удобного использования плагина на мобильных устройствах.
Плагин отлично подойдет для отображения больших изображений даже на маленьких экранах мобильных устройств.

Примеры | Скачать

jQuery плагин Silver Track

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

Примеры | Скачать

AnoSlide – Ультра компактный адаптивный jQuery слайдер

Ультра компактный jQuery слайдер – карусель, функционал которого намного больше, чем у обычного слайдера. Он включают в себя предварительный просмотр одного изображения, отображение нескольких изображений в виде карусели и слайдера на основе заголовков.

Примеры | Скачать

Owl Carousel – Jquery слайдер — карусель

Owl carousel – слайдер с поддержкой сенсорных экранов и технологии drag and drop , легко встраиваемый в HTML — код. Плагин является одним из лучших слайдеров, которые позволяют создавать красивые карусели без какой — либо специально подготовленной разметки.

Примеры | Скачать

3D галерея — карусель

Использует 3D – переходы, основанные на CSS – стилях и немного Javascript кода.

Примеры | Скачать

3D карусель с использованием TweenMax.js и jQuery

Великолепная 3D карусель. Похоже, что это еще бета – версия, потому как я обнаружил пару проблем с ней буквально сейчас. Если вы заинтересованы в тестировании и создании ваших собственных слайдеров – эта карусель будет большим подспорьем.

Примеры | Скачать

Карусель с использованием bootstrap

Адаптивный слайдер – карусель с использованием технологии bootstrap как раз для вашего нового веб-сайта.

Примеры | Скачать

Основанный на Bootstrap – фреймворке слайдер — карусель Moving Box

Наиболее востребованный на портфолио и бизнес сайтах. Подобный тип слайдера — карусели часто встречается на сайтах любого типа.

Примеры | Скачать

Tiny Circleslider

Это слайдер крошечного размера готов работать на устройствах с любым разрешением экрана. Слайдер может работать как в круговом, так и карусельном режиме. Tiny circle представлен как альтернатива другим слайдерам подобного типа. Имеется встроенная поддержка операционных систем IOS и Android .

В круговом режиме слайдер выглядит довольно интересно. Отлично реализована поддержка метода drag and drop и система автоматической прокрутки слайдов.

Примеры | Скачать

Слайдер контента Thumbelina

Мощный, адаптивный, слайдер карусельного типа отлично подойдет к современному сайту. Корректно работает на любых устройствах. Имеет горизонтальный и вертикальный режимы. Его размер минимизирован всего до 1 КБ. Ультра компактный плагин ко всему прочему имеет отличные плавные переходы.

Примеры | Скачать

Wow – слайдер — карусель

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

Примеры | Скачать

Адаптивный jQuery слайдер контента bxSlider

Измените размер окна браузера, чтобы увидеть, как адаптируется слайдер. Bxslider поставляется более чем с 50 вариантами настроек и демонстрирует свои функции с различными эффектами переходов.

Примеры | Скачать

jCarousel

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

Примеры | Скачать

Scrollbox — jQuery плагин

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

Примеры | Скачать

dbpasCarousel

Простой слайдер – карусель. Если вам нужен быстрый плагин – этот подойдет на 100%. Поставляется только с основными функциями, необходимыми для работы слайдера.

Примеры | Скачать

Flexisel: адаптивный JQuery плагин слайдера — карусели

Создатели Flexisel вдохновились плагином старой школы jCarousel , сделав его копию, ориентированную на корректную работу слайдера на мобильных и планшетных устройствах.

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

Примеры | Скачать

Elastislide – адаптивный слайдер — карусель

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

Пример | Скачать

FlexSlider 2

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

Пример | Скачать

Amazing Carousel

Amazing Carousel – адаптивный слайдер изображений на jQuery . Поддерживает множество систем управления сайтами, такие как WordPress , Drupal и Joomla . Также поддерживает Android и IOS и настольные варианты операционных систем без каких-либо проблем с совместимостью. Встроенные шаблоны amazing carousel позволяют использовать слайдер в вертикальном, горизонтальном и круговом режимах.

Примеры | Скачать

© 2024 tdv-elektro.ru
Windows. Железо. Интернет. Безопасность. Программы