Фотогалерея слайдер. Slider Pro - адаптивный слайдер с миниатюрами. CSS3 галерея с эффектом при наведении

Фотогалерея слайдер. Slider Pro - адаптивный слайдер с миниатюрами. CSS3 галерея с эффектом при наведении

Это адаптивный тач слайдер, написанный на jQuery. В движке данного плагина используются CSS3 анимации, но в то же время, предусмотрены фолбэки для более старых версий браузеров. Glide.js прост и легковесен.

Использование 1. Подключаем jQuery

Единственная зависимость плагина - это jQuery, который мы должны подключить в первую очередь:

2. Подключаем Glide.js

3. Добавляем html

Подключим базовые стили.

Накатаем html структуру слайдера.

4. Инициализация

Запускаем слайдер с настройками по умолчанию...

$(".slider").glide();

… или настраиваем его под себя

$(".slider").glide({ autoplay: 5000, arrows: "body", nav: "body" });

Настройки

Список доступных параметров:

Параметр Значение по умолчанию Тип Описание
autoplay 4000 int/bool Автопрокрутка (false для отключения)
hoverpause true bool Приостанавливать автопрокрутку при наведении мыши на слайдер
animationTime 500 int !!! Данная опция работает, если браузер НЕ поддерживает css3. Если css3 поддерживается браузером, то данный параметр нужно изменить в.css файле!!!
arrows true bool/string Показать/скрыть/прикрепить стрелки. True для отображения стрелок в контейнере слайдера. False для скрытия. Так же можете указать название класса (пример: ".class-name") для прикрепления особого html кода
arrowsWrapperClass slider-arrows string Класс, который присвоится контейнеру с стрелками
arrowMainClass slider-arrow string Основной класс для всех стрелок
arrowRightClass slider-arrow--right string Класс для правой стрелки
arrowLeftClass slider-arrow--left string Класс для левой стрелки
arrowRightText next string Текст для правой стрелки
arrowLeftText prev string Текст для левой стрелки
nav true bool/string Показать/скрыть/прикрепить навигацию по слайду. True для отображения. False для скрытия
navCenter true bool Навигация по центу
navClass slider-nav string Класс для контейнера навигации
navItemClass slider-nav__item string Класс для элемента навигации
navCurrentItemClass slider-nav__item--current string Класс для текущего элемента навигации
keyboard true bool Прокручивать слайд при нажатии на кнопки налево/направо
touchDistance 60 int/bool Поддержка прикосновения (тач). False для отключения данной возможности.
beforeInit function(){} function Колбэк, который запустится перед инициализацией плагина
afterInit function(){} function Колбэк, который запустится после инициализацией плагина
beforeTransition function(){} function Колбэк, который запустится перед прокруткой слайдера
afterTransition function(){} function Колбэк, который запустится после прокрутки слайдера
API

Для использования API, запишите glide в переменную.

Var glide = $(".slider").glide().data("api_glide");

Теперь вам доступны API методы.

Glide.jump(3, console.log("Wooo!"));

  • .current() - Возврат номера текущего сайда
  • .play() - Начать автопрокрутку
  • .pause() - Остановить автопрокрутку
  • .next(callback) - Пролистнуть слайдер вперёд
  • .prev(callback) - Пролистнуть слайдер назад
  • .jump(distance, callback) - Переключиться на определённый слайд
  • .nav(target) - Прикрепить навигацию к определённому элементу (к примеру: "body", ".class", "#id")
  • .arrows(target) - Прикрепить стрелки к определённому элементу (к примеру: "body", ".class", "#id")

В этой статье разберём как можно очень просто с помощью 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.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 с некоторыми встроенными опциями, такими как фон видео / изображений и различные выравнивания текста. В попытке увеличить взаимодействие с пользователем мы заменили «навигационные стрелки» на кнопки. Разница заключается в следующем: кнопки имеют заголовок, подсказку о том, какой контент ожидать. Стрелки просто говорят пользователям «вы можете переключать слайд».

Создание структуры

HTML структурирован в 2 основных элемента: неупорядоченный список ul.cd-hero-slider , содержащий слайды, и div.cd-slider-nav , содержащий навигацию ползунка и маркер span.cd (используемый для создания Маркер выбранного элемента в навигации).












  • Intro

  • Tech 1





Добавление стиля

Структура слайдера довольно проста: все слайды переведены вправо, вне окна просмотра translateX (100%) ; Выбранный класс добавляется в видимый слайд, чтобы переместить его обратно в окно просмотра translateX (0) , а класс.move-left используется для перевода слайда влево translateX (-100%) .

Для достижения гладкой анимации мы использовали переходы CSS3, применяемые к элементу.selected и.is-moving: при выборе нового слайда класс.is-moving присваивается слайду, движущемуся за пределами области просмотра, в то время как выбранный Класс присваивается выбранному слайду.

Cd-hero-slider li { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transform: translateX(100%); } .cd-hero-slider li.selected { /* this is the visible slide */ position: relative; transform: translateX(0); } .cd-hero-slider li.move-left { /* slide hidden on the left */ transform: translateX(-100%); } .cd-hero-slider li.is-moving, .cd-hero-slider li.selected { /* the is-moving class is assigned to the slide which is moving outside the viewport */ transition: transform 0.5s; }

О одиночной анимации слайдов: на больших устройствах (ширина видового экрана более 768 пикселей) мы решили оживить эффект входа, оживляя отдельные слайдовые элементы.cd-half-width и.cd-full-width , изменяя их непрозрачность и Преобразовать свойства.

Классы.from-left и.from-right используются для определения того, входит ли выбранный слайд в область просмотра слева или справа, чтобы запускать другую анимацию в соответствии с направлением входа. Чтобы этот эффект работал правильно, мы использовали другое значение задержки анимации для каждого анимированного элемента.

Для элементов.cd-half-width , например:

@media only screen and (min-width: 768px) {
.cd-hero-slider .cd-half-width {
opacity: 0;
transform: translateX(40px);
}
.cd-hero-slider .move-left .cd-half-width {
transform: translateX(-40px);
}
.cd-hero-slider .selected .cd-half-width {
/* this is the visible slide */
opacity: 1;
transform: translateX(0);
}
.cd-hero-slider .is-moving .cd-half-width {
/* this is the slide moving outside the viewport
wait for the end of the transition on the

  • parent before set opacity to 0 and translate to 40px/-40px */
    transition: opacity 0s 0.5s, transform 0s 0.5s;
    }
    .cd-hero-slider li.selected.from-left .cd-half-width:nth-of-type(2),
    .cd-hero-slider li.selected.from-right .cd-half-width:first-of-type {
    transition: opacity 0.4s 0.2s, transform 0.5s 0.2s;
    }
    .cd-hero-slider li.selected.from-left .cd-half-width:first-of-type,
    .cd-hero-slider li.selected.from-right .cd-half-width:nth-of-type(2) {
    /* this is the selected slide - different animation if it"s entering from left or right */
    transition: opacity 0.4s 0.4s, transform 0.5s 0.4s;
    }
    }

    Обработка событий

    Видео, используемое в качестве фона для одного из слайдов, не вставлено непосредственно в HTML, а загружается, только если ширина устройства больше 768 пикселей; Таким образом, видео не будет загружено на мобильные устройства. Видеоданные выбранного слайда используются для извлечения видеоролика. Вы можете сделать то же самое для элементов внутри контейнера.cd-img (который скрыт на мобильных устройствах).

    Кроме того, мы использовали jQuery для реализации функциональности слайд-шоу: когда пользователь щелкает один из элементов списка вкладки.cd-slider-nav , мы обнаруживаем позицию выбранного элемента (используя функцию index ()) и обновляем слайдер (Используя функции nextSlide () или prevSlide () в соответствии с этой позицией) и положение span.cd-marker .

    $(".cd-slider-nav li").on("click", function(event){ event.preventDefault(); var selectedItem = $(this); if(!selectedItem.hasClass("selected")) { // if it"s not already selected var selectedPosition = selectedItem.index(), activePosition = $(".cd-hero-slider .selected").index(); if(activePosition

    Примечание!

    Если вы хотите анимировать слайдер автоматически, добавьте класс.autoplay в элемент ul.cd-hero-slider .

    Ноябрь 4, 2019 Запись была обновлена

    Юрий Немец

    Слайдеры на чистом CSS + бонусный слайдер

    Слайдеры на CSS имеют некоторое преимущество перед слайдерами на Javascript. Одно из таких преимуществ — это скорость загрузки. Мало того что изображения для слайдеров используются больших размеров (если нет оптимизации под разные экраны), так еще и на загрузку скриптов тратится некоторое время. Но в статье Вы увидите только слайдеры на чистом CSS.

    Вот что я нашел на сайте на тему слайдеров:

    1. CSS3 слайдер изображений

    Слайдер на CSS, который использует для навигации по слайдам радиокнопки. Эти радиокнопки находятся под слайдеров. Также помимо радиокнопок навигация осуществляется с помощью стрелок слева и справа. Чтобы следить за тем, какое изображение сейчас отображать — используются псевдоклассы :checked .

    2. CSS3 слайдер изображений с миниатюрами

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

    3. Галерея на CSS

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

    4. Слайдер на CSS без ссылок

    Сразу хочу заметить что этот слайдер не использует ссылок! По умолчанию кроме главного изображения (слайда) видны еще 2 слайда. Они расположены позади основного. Смена слайдов происходит в красивом режиме: сначала раздвигаются два слайда и по центру становится тот слайд, который затем станет главным. Затем слайд увеличивается и помещается впереди остальных.

    5. Адаптивный слайдер на CSS3

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

    *** БОНУСНЫЙ СЛАЙДЕР ***

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

    Вывод

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

    Пункты, которые были рассмотрены в статье.

    SliderPro - адаптивный jQuery слайдер c поддержкой миниатюр и другими настройками, включая также и собственное API.

    • Слайдер по умолчанию подстраивается под размеры экрана. Масштабироваться будут не только изображения, но и слои с вашим дополнительным контентом.
    • Поддержка touch-swipe событий для сенсорных экранов. Использование Breakpoints - аналог CSS media queries, для изменения настроек слайдера на различных размерах экрана.
    • Плавная анимация с помощью css3 transitions, анимация слоев, fade эффект для смены слайдов.
    • Слайдер может быть на всю ширину страницы, на весь экран или располагаться внутри контейнера.
    • Автоизменение высоты слайда. Ориентация превьюшек может быть, как вертикальная, так и горизонтальная.
    • Для изображений поддерживается lazy loading, retina, возможность подгружать различные изображения под конкретные размеры экранов.
    • Поддержка видео, интеграция с lightbox, навигация стрелками, точками, клавиатурой, миниатюрами и многое, многое другое.
    CSS

    Подключаем файл стилей:

    HTML

    Пример разметки для вставки слайдера:

    Lorem ipsum dolor sit amet

    Lorem ipsum dolor sit amet

    consectetur adipisicing elit

    JS

    Подключаем необходимые скрипты:

    Выполняем инициализацию плагина:

    jQuery(document).ready(function($) { $("#my-slider").sliderPro(); });

    Более подробно о слайдере и его использовании можно найти на гитхабе. Ссылка ниже.



  • © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows