Подборка адаптивных слайдеров. Слайдер с прокруткой (карусель) Слайдер с прокруткой
Может быть полезным:
- Лагерь для подростков в подмосковье лучших детских лагерей подмосковья. Слайдер с прокруткой (карусель)
- Подпись к фото 1
- Подпись к фото 2
- Подпись к фото 3
Как всегда, начнем с постановки задачи: на сей раз нам потребуется создать слайдер, который будет прокручивать изображения используя эффект сдвига. Естественно, у него должны присутствовать кнопки навигации и анимация должна останавливаться, если курсор мыши находится в области карусели.
Для кнопок навигации будем использовать то же изображение, что и в предыдущем примере:
html разметку в этот раз немного усложним - будем прокручивать не просто картинки, а блоки в которых помимо изображений присутствует текст. Ну и еще одно изменение коснется кнопок прокрутки. Их мы тоже добавим непосредственно в разметку, а не с помощью js, как это делали в предыдущем примере. Вот что получится в итоге:
prev next
Всю конструкцию мы помещаем в общий контейнер с классом carousel_wrap . Кнопки оформляем с помощью элементов span . Контейнер с классом visual_block будет служить окном, в котором будет отображаться содержимое слайда, а сами слайды (оформим их в виде ненумерованного списка) должны будут располагаться друг за другом. Само собой, ограничений на количество элементов LI нет.
Оформим внешний вид с помощью css:
Carousel_wrap { margin: 50px auto; width:700px; position:relative; } .visual_block { margin: 0 auto; position: relative; overflow: hidden; } .visual_block ul { position: relative; } .visual_block ul, .visual_block li { float: left; } .carousel_wrap span.next, .carousel_wrap span.prev { margin-top:-20px; width:15px; height:26px; display:block; text-indent:-9999px; overflow:hidden; cursor:pointer; background:url(slider2_arrow.png) no-repeat; position:absolute; top:50%; } .carousel_wrap span.next { right:0; background-position:-15px 0; } .carousel_wrap span.next:hover { background-position:-15px -26px; } .carousel_wrap span.prev:hover { background-position:0 -26px; }
Можно приступать к написаню js кода. Подумаем, как это можно сделать.
Сейчас все элементы LI расположены друг под другом. Что бы осуществить задуманное, нам потребуется выстроить их в один ряд, установить ширину блока visual_block равной ширине одного слайда (тогда отображаться будет только один элемент - все остальные обрежутся) и заставить слайды сдвигаться на эту же ширину через определенные промежутки времени. Удобнее всего будет, если размеры всех блоков будут высчитываться динамически. В jQuery подобное реализуется несколькими способами. Для нашего случая воспользуемся методами outerWidth() и outerHeight() . Эти методы вернут размеры отобранного элемента со всеми отступами. Ну и конечно, что бы было удобно оперировать значениями, будем сохранять их в переменных. Приступим.
Сначала объявим переменные для блоков оберток.
Var elWrap = $("div.carousel_wrap"), visual = $("div.visual_block") carousel = visual.children("ul");
Далее добавим переменные visible (в ней будем хранить количество отображаемых блоков - в нашем случае это 1), itemWidth , itemHeight и itemsTotal (сюда положим значения ширины и высоты одного слайда, а так же их общее количество).
Var elWrap = $(".carousel_wrap"), visual = $(".visual_block"), carousel = visual.children("ul"), visible = 1, itemWidth = carousel.children().outerWidth(), itemHeight = carousel.children().outerHeight(), itemsTotal = carousel.children().length;
Теперь мы спокойно можем вычислить необходимые размеры контейнеров visual_block , visual_block ul и присвоить им нужные значения:
Visual.css({"width": visible * itemWidth + "px", "height" : itemHeight}); carousel.css({"width": itemsTotal * itemWidth, "left": 0});
Конструкция приобрела необходимый вид, но все еще не работает. Нужно заставить слайды двигаться (предположим, влево). Сделаем это, воспользовавшись методом animate , который будет смещать элемент UL влево.
Carousel.animate({left: -itemWidth}, 500);
Тут мы применили метод animate к блоку UL и в параметрах указали, что блок нужно сдвинуть относительно левого края visual_block на расстояние, равное значению переменной itemWidth за промежуток времени 500 мл с. Что бы блок уехал в нужном направлении, переменной itemWidth задали отрицательное значение. К сожалению, такой записью желаемого результата добиться не удалось. Все, чего мы достигли, это смещение UL относительно visual_block всего один раз. Не беда, мы уже проделывали трюки с многократным повторением одного и того же действия (вспоминаем прошлый пример). Поступим так же и в этот раз. Создадим функцию, в которую "упакуем" нашу запись и будем вызывать ее с помощью метода setInterval , скажем, каждые три секунды.
Function chengeLeft () { carousel.animate({left: -itemWidth}, 500); } setInterval(chengeLeft, 3000);
Снова неудача - смещение UL по прежнему происходит один раз. Оно и понятно. Мы же указали, что элемент требуется сдвинуть на itemWidth , задача выполнена и больше ничего не происходит. Последующие вызовы функции срабатывают в холостую. А что, если заставить UL возвращаться назад? Тогда каждый раз, когда будет вызываться функция элемент будет находиться в своем начальном положении. Попробуем. Возвращать элемент обратно нам нужно после того, как отработает animate . Вот и зададим ему в качестве третьего параметра так называемую callBack функцию, которая вернет UL в первоначальное положение.
Function chengeLeft () { carousel.animate({left: -itemWidth}, 500, function() { carousel.css({"left": 0 }); }); } setInterval(chengeLeft, 3000);
Посмотрим на результат. На первый взгляд может показаться, что снова ничего хорошего не вышло. Каждые три секунды первый слайд сдвигается влево, уступая место второму и тут же возвращается назад... Полный провал.
На самом деле это не так. Нам просто нужно сделать еще несколько действий в callBack функции, а именно, клонировать первый элемент (который спрятался) и поместить клон в самый конец карусели, затем удалить этот элемент в начале карусели и только после этого вернуть UL на место. Осуществим задуманное.
Function chengeLeft () { var item = carousel.children().eq(0); carousel.animate({left: -itemWidth}, 500, function() { item.clone().appendTo(carousel); item.remove(); carousel.css({"left": 0 }); }); } setInterval(chengeLeft, 3000);
В функции chengeLeft объявляем переменную item , в которой будем хранить первый слайд. Затем в callBack функции клонируем слайд, перемещаем клон в конец карусели и удаляем сам элемент. В итоге нас ожидает полный успех. Мы запустили автоматическую прокрутку. Весь код теперь выглядит так:
$(document).ready(function(){ var elWrap = $(".carousel_wrap"), visual = $(".visual_block"), carousel = visual.children("ul"), visible = 1, itemWidth = carousel.children().outerWidth(), itemHeight = carousel.children().outerHeight(), itemsTotal = carousel.children().length; visual.css({"width": visible * itemWidth + "px", "height" : itemHeight}); carousel.css({"width": itemsTotal * itemWidth, "left": 0}); function chengeLeft () { var item = carousel.children().eq(0); carousel.animate({left: -itemWidth}, 500, function() { item.clone().appendTo(carousel); item.remove(); carousel.css({"left": 0 }); }); } setInterval(chengeLeft, 3000); });
Скачать готовый кодВ следующей статье мы закончим работу над слайдером - каруселью , заставив работать кнопки навигации.
Адаптивная jquery галерея (изменяет размер при изменении разрешения экрана), отображаемая во всплывающем окне с миниатюрами и подписями изображений. Jquery галерея «Fresco» корректно работает в большинстве браузеров в том числе: IE6+,Firefox 3+,Chrome 5+, Opera 9+. Бесплатная версия этого плагина может использоваться только на некоммерческих проектах.
2. Слайдер «Adaptor»Слайдер с различными эффектами переходов (7 различных эффектов, в том числе 3D). Проект на Github .
3. Плагин слайдера с различными эффектами «jQ-Tiles»Плагин с различными эффектами перехода, с настраиваемой скоростью смены слайдов, с функцией автопрокрутки.
4. jQuery плагин «Sly»Плагин для реализации вертикального и горизонтального скроллера. Проект на Github .
5. Анимированное CSS3 меню «Makisu»Слайдер контента/слайдшоу (в качестве слайда может быть не только изображения, а также видео ролики и другое HTML содержимое). Для навигации можно использовать: миниатюры, кнопок Влево/Вправо и с помощью клавиатуры. Проект на Github.com .
8. Набор jQuery плагинов «Vanity»В наборе 7 плагинов: jSlider, jTabs, jPaginate, jSpotlight, jTip, jPlaceholder и jCollapse. Набор этих решений поможет вам в реализации слайдера, всплывающих подсказок, табов, всплывающих описаний изображений и др.
9. Hover CSS3 эффектСлайдер, заточенный под работу на мобильных устройствах.
12. CSS3 индикатор загрузкиПлагин является легким решением для реализации просмотра продуктов в различных цветовых вариантах (актуально, например, для интернет-магазинов одежды, чтобы дать посетителям выбрать цветовую гамму товара из нескольких вариантов). Для работы плагина необходимо только два изображения для каждого продукта (все цвета будут накладываться в виде маски). Плагин работает во всех основных браузерах, включая IE7 + (будет работать и в IE6, если вы пофиксите отображение прозрачности PNG). Проект на GitHub .
15. CSS3 анимированные диаграмыПри клике по изображению оно затемняется, уходя на задний план, и появляются пункты с подписями. Таким образом можно дать краткое описание элементов, расположенных на изображении.
17. Навигация по странице в виде выпадающего менюРешение для реализации удобной навигации по документу в виде выпадающего меню. Содержание зафиксировано сверху экрана и всегда остается в поле зрения посетителя. При выборе раздела в меню происходит плавная прокрутка страницы к выбранной части документа.
18. CSS3 галерея с эффектом при наведенииПри наведении курсора на изображение происходит быстрая смена фотографий. Галерея реализована в двух вариантах: с описанием снимков, появляющимся после того, как посетитель отведет курсор с галереи и без описания.
19. jQuery слайдер с Parallax эффектомНажмите на стрелочку внизу экрана на демонстрационной странице, чтобы увидеть всплывающие иконки.
22. Бесплатная HTML5 галерея изображений «Juicebox Lite»Очень функциональная новая галерея изображений для сайта. Галерея может быть как с миниатюрами так и без них, с описанием изображением и без, может разворачиваться на весь экран или отображаться на странице с фиксированными размерами. На странице демо , вы можете выбрать вид галереи, который вам понравится. Для скачивания доступна бесплатная версия галереи. За более продвинутый функционал и за то, чтобы убрать логотип разработчика, придется заплатить.
23. Плагин «JQVMap»Адаптивная галерея, размеры изображений и миниатюр изменяются вместе с размером окна браузера.
26. jQuery плагин слайдера контента «Horinaja»Плагин легок в установке, настраиваемый, кроссбраузерный. В качестве слайда может выступать любой HTML контент, не только изображения. Прокручивать слайды можно с помощью колеса мыши в тот момент, когда курсор находится на области слайда.
27. Плагин jQuery слайдера «Pikachoose»В трех вариациях: реализация простой смены изображений без описания и миниатюр; слайдер с подписями изображений и миниатюрами; слайдер с миниатюрами и добавленным открытием увеличенного изображения во всплывающем окне с эффектом FancyBox. Последнюю версию всегда можно найти на Github .
28. Несколько пользовательских CSS стилизаций выпадающих списковПять различных стилевых оформлений выпадающих списков с использованием различных CSS техник.
29. Ресторанное меню с анимированным 3D эффектомИнтересное CSS jQuery представление информации на странице. По нажатию на ссылку раскрывается буклет-меню и посетитель может во всплывающем окне прочитать подробнее о предоставленных блюдах. Анимация некорректно отображается в IE.
30. Плагин «Elastislide»Реализация резиновой адаптивной карусели (вертикальная и горизонтальная карусель изображений) и галереи изображений. При уменьшении окна браузера уменьшается количество изображений до определенного минимального значения и далее масштабируется размер оставшихся изображений. Проект на Github .
31. Свежий CSS3 jQuery слайдер «Slit Slider»Адаптивный плагин слайдера (ширину можно задавать в процентах и он автоматически смасштабируется) в двух стилевых исполнениях с интересным анимированным эффектом при смене слайдов (слайд разрубается пополам и разъезжается в разные стороны, а его место занимает новый). Возможна навигация с помощью клавиатуры. Свежая версия всегда на Github .
32. Новая версия 3D слайдера изображений «Slicebox»Новая версия с внесенными изменениями и добавлением новых функций: теперь 3D слайдер стал масштабируемым, увидеть это можно при уменьшении окна браузера; добавлена поддержка Firefox; в описании к слайду уже можно использовать HTML контент (раньше описание подтягивалось из атрибута ссылки без возможности использовать в нем HTML теги). На демонстрационной странице можно посмотреть 4 варианта использования плагина. Последняя версия живет на Github.com .
Эффект очень похож на Flash галерею 3D CU3ER (демо , скачать), только выполнен этот 3D слайдер не с помощью flash технологий, а с помощью javascript.
33. jQuery плагин «PFold»Экспериментальное решение. Плагин реализует 3D эффект с имитацией разворачивания записки. Различные варианты исполнения: с тремя разворотами, с двумя разворотами и разворот с последующим центрированием развернутой записки.
34. jQuery плагин «Windy»Плагин для навигации по контенту, например по изображениям. При пролистывании фотографий они разлетаются в разные стороны (эффект чем-то напоминает раздачу карт в карточной игре покер). Для навигации можно использовать кнопки влево/вправо или ползунок (смотрите разные варианты на демонстрационной странице). Проект на
Время не стоит на месте а с ним и прогресс. Это затронуло и просторы интернета. Уже можно заметить как меняется внешний вид сайтов, особенно большой популярностью пользуется адаптивный дизайн. И в связи с этим появилось не мало новых адаптивных jquery слайдеров
, галерей, каруселей или подобных плагинов.
1. Responsive Horizontal Posts Slider
Адаптивная горизонтальная карусель с детальной инструкцией по установке. Выполнена она в простом стиле, но вы можете ее стилизовать под себя.
2. Слайдер на Glide.js
Этот слайдер подходит для любого сайта. Тут используется Glide.js с открытым кодом. Цвета слайдера можно легко изменить.
3. Tilted Content Slideshow
Адаптивный слайдер с контентом. Изюминкой данного слайдера является 3d эффект изображений, а также разные анимации появления в случайном порядке.
4. Слайдер с использованием HTML5 canvas
Очень красивый и впечатляющий слайдер с интерактивными частицами. Выполнен он с помощью HTML5 canvas,
5. Слайдер «Морфинг изображений»
Слайдер с эффектом морфинга (Плавная трансформация из одного объекта к другому). В данном примере слайдер хорошо подойдет для портфолио веб-разработчика или веб-студии в виде портфолио.
6. Круговой слайдер
Слайдер в виде круга с эффектом переворота изображения.
7. Слайдер с размытым фоном
Адаптивный слайдер с переключением и размытием заднего фона.
8. Адаптивный фэшн слайдер
Простой, легкий и адаптивный слайдер для сайта.
9. Slicebox - jQuery 3D image slider (ОБНОВЛЕННЫЙ)
Обновленная версия Slicebox slider с исправлениями и новыми возможностями.
10.Free Animated Responsive Image Grid
Плагин JQuery для создания гибкой сетки изображения, который будет переключать снимки, используя различные анимации и тайминги. Это может хорошо смотреться в качестве фона или декоративного элемента на сайте, так как мы можем настроить выборочное появление новых изображений и их переходов. Плагин выполнен в нескольких вариантах.
11. Flexslider
Универсальный бесплатный плагин для вашего сайта. Этот плагин выполнен в нескольких вариантах слайдера и каруселях.
12. Фоторама
Fotorama - это универсальный плагин. У него есть много настроек, все работает быстро и легко, есть возможность просмотра слайдов на весь экран. Слайдер можно использовать как в фиксированном размере так и адаптивном, с миниатюрами и без, с круговой прокруткой и без и еще много чего.
P.S. Ставил слайдер несколько раз и считаю что он один из лучших
13. Бесплатная и адаптивная 3D галерея-слайдер с миниатюрами.
Экспериментальная галерея-слайдер 3DPanelLayout с сеткой и интересными эффектами анимации.
14. Слайдер на css3
Адаптивный слайдер выполнен при помощи css3 с плавным появлением контента и легкой анимацией.
15. WOW Slider
WOW Slider - это слайдер изображений с потрясающими визуальными эффектами.
17. Elastic
Эластичный слайдер с полной адаптивностью и с миниатюрами слайдов.
18. Slit
Это полноэкранный адаптивный слайдер с использованием анимации css3. Выполнен слайдер в двух вариантах. анимация сделана достаточно необычно и красиво.
19. Адаптивная фотогалерея plus
Простой бесплатный слайдер-галерея с подгрузкой изображений.
20. Адаптивный слайдер для WordPress
Адаптивный бесплатный слайдер для WP.
21. Parallax Content Slider
Слайдер с эффектом параллакса и контролем каждого элемента с помощью CSS3.
22. Слайдер с привязкой музыки
Слайдер с использованием открытого исходного кода JPlayer. Этот слайдер напоминает презентацию с музыкой.
23. Слайдер с jmpress.js
Адаптивный слайдер основан на jmpress.js и поэтому позволит использовать некоторые интересные 3D эффекты к слайдам.
24. Fast Hover Slideshow
Слайд шоу с быстрым переключением слайдов. Слайды переключаются при наведении курсора.
25. Image Accordion with CSS3
Аккордеон изображений с помощью css3.
26. A Touch Optimized Gallery Plugin
Это адаптивная галерея которая оптимизирована для тач-устройств.
27. 3D Галерея
3D Wall Gallery - создана для браузера Safari, где будет виден 3D эффект. Если смотреть на другом браузере то функциональность будет в порядке но небудет виден 3D эффект.
28. Слайдер с пагинацией
Адаптивный слайдер с нумерацией страниц с помощью ползунка JQuery UI. идея состоит в том чтобы чтобы использовать простую концепцию навигации. Есть возможность перемотки всех изображений или послайдового переключения.
29.Image Montage with jQuery
Автоматическое расположение изображений в зависимости от ширины экрана. Очень полезная штука при разработке сайта портфолио.
30. 3D Gallery
Простенький 3D круговой слайдер на css3 и jQuery.
31. Полноэкранный режим с 3D эффектом на css3 и jQuery
Слайдер с возможностью полно-экранного просмотра изображений с красивым переходом.
Фикс от 18 января 2013:
Устранен баг с автопрокруткой при переключении вкладок или при сворачивании окна браузера. Убрана проверка наличия атрибута name у ссылок вперед/назад.
Обновлен архив с исходниками.
Фикс от 19 июня 2013:
Добавлена возможность использовать несколько слайдеров на странице, пока без поддержки автопрокрутки, поэтому архив с исходниками и страницу демо не обновлял.
Поправил баг появления картинок под стрелочками
О том как запустить автопрокрутку без нажатия на кнопку play я ответил во
Слайдеры (ротаторы контента[изображений, текста, видео]) присутствуют в каждом проекте. В интернете, реально, куча проектов, где можно скачать и подобрать по своему вкусу практически любой плагин слайдера. Однако, бывают ситуации, когда подключать к проекту слайдер, минимизированная версия которого весит от 10Кб — нецелесообразно.
Допустим, Вам требуется сделать слайдер, который содержит 15-20 картинок с подписями или пару тройку видеороликов. Именно для таких случаев Вам и пригодится данный урок, где Вы научитесь делать слайдер с горизонтальной прокруткой , причем не оптимизированный скрипт будет весить меньше 2Кб. Нажав ниже кнопку «Demo» Вы можете посмотреть демонстрацию урока, а кликнув по кнопке «Source», получите архив урока (с комментариями), кстати чтобы научиться делать простой слайдер на миниатюрах прочтите .
Для понимания, сути скажу, что в конце урока мы получим слайдер с такими функциями:
- Переключение слайдов влево-вправо
- Режим автоматической работы слайдера, кнопки старт-пауза
- Неограниченное количество слайдов
Разметка слайдера очень проста, нам понадобится:
- общий контейнер (slider),
- Три контейнера для навигации (две кнопки на предыдущий/следующий слайд (navy) и одна кнопка(auto) для кнопок старт/пауза),
- контейнер для всех слайдов (slide-list),
- обертка всех слайдов (slide-wrap).
Для стилизации слайдера, добавим чучуть правил в файл стилей.
/* Задаем сброс обтекания */ .clear { margin-top: -1px; height: 1px; clear:both; zoom: 1; } /* Slider */ .slider { /* Ширина контейнера */ width: 900px; /* Внешние тступы сверху и снизу */ margin: 50px auto; /* Внутренние отступы для ссылок navy */ padding: 0 30px; /* Позиционирование */ position: relative; } /* Двойной клик по кнопкам вперед/назад вызывает выделение всех элементов слайдера, поэтому предотвращаем это */ .slider::-moz-selection { background: transparent; color: #fff; text-shadow: none; } .slider::selection { background: transparent; color: #fff; text-shadow: none; } .slide-list { position: relative; margin: 0; padding: 0; /* Скроем то что выходит за границы */ overflow: hidden; } .slide-wrap { position: relative; left: 0px; top: 0; /* максимально возможная ширина обертки слайдера */ width: 10000000px; } .slide-item { /* Ширина слайда */ width: 280px; /* Внутренние отступы */ padding: 10px; /* Обтекание */ float: left; } .slide-title { /* Шрифт */ font: bold 16px monospace; /* Указываем, что элемент блочный */ display: block; }
И еще не маловажные стили для кнопок навигации вперед/назад и старт/пауза
/* навигация вперед/назад */ .navy { /* абсолютное позиционирование */ position: absolute; top: 0; z-index: 1; height: 100%; /* ширина элементов */ width: 30px; cursor: pointer; } .prev-slide { left: 0; background: #dbdbdb url(bg/left-arrow.png) 11px 40% no-repeat; } .next-slide { right: 0; background: #dbdbdb url(bg/right-arrow.png) 13px 40% no-repeat; } .navy.disable { background: #dbdbdb; } /* навигация старт/пауза */ .auto { width: 7px; height: 11px; cursor: pointer; margin: 10px auto; } .play { background: url(bg/play.png) center no-repeat; } .pause { background: url(bg/pause.png) center no-repeat; }
Запомните, что фон у кнопок указывается такой же как и общий фон, чтобы перекрыть отображение слайдов. Теперь очередь скрипта jQuery, которым и займемся.
Пишем скриптНе забудьте, что для начала нужно подключить библиотеку jQuery . А после напишем скрипт слайдера и инициализируем его. Для начала приведу полный листинг кода, а затем объясню, что тут происходит:
jQuery(document).ready(function(){ function htmSlider(){ /* Зададим следующие параметры */ /* обертка слайдера */ var slideWrap = jQuery(".slide-wrap"); /* кнопки вперед/назад и старт/пауза */ var nextLink = jQuery(".next-slide"); var prevLink = jQuery(".prev-slide"); var playLink = jQuery(".auto"); /* Проверка на анимацию */ var is_animate = false; /* ширина слайда с отступами */ var slideWidth = jQuery(".slide-item").outerWidth(); /* смещение слайдера */ var scrollSlider = slideWrap.position().left - slideWidth; /* Клик по ссылке на следующий слайд */ nextLink.click(function(){ if(!slideWrap.is(":animated")) { slideWrap.animate({left: scrollSlider}, 500, function(){ slideWrap .find(".slide-item:first") .appendTo(slideWrap) .parent() .css({"left": 0}); }); } }); /* Клик по ссылке на предыдующий слайд */ prevLink.click(function(){ if(!slideWrap.is(":animated")) { slideWrap .css({"left": scrollSlider}) .find(".slide-item:last") .prependTo(slideWrap) .parent() .animate({left: 0}, 500); } }); /* Функция автоматической прокрутки слайдера */ function autoplay(){ if(!is_animate){ is_animate = true; slideWrap.animate({left: scrollSlider}, 500, function(){ slideWrap .find(".slide-item:first") .appendTo(slideWrap) .parent() .css({"left": 0}); is_animate = false; }); } } /* Клики по ссылкам старт/пауза */ playLink.click(function(){ if(playLink.hasClass("play")){ /* Изменяем клас у кнопки на клас паузы */ playLink.removeClass("play").addClass("pause"); /* Добавляем кнопкам вперед/назад клас который их скрывает */ jQuery(".navy").addClass("disable"); /* Инициализируем функцию autoplay() через переменную чтобы потом можно было ее отключить */ timer = setInterval(autoplay, 1000); } else { playLink.removeClass("pause").addClass("play"); /* показываем кнопки вперед/назад */ jQuery(".navy").removeClass("disable"); /* Отключаем функцию autoplay() */ clearInterval(timer); } }); } /* иницилизируем функцию слайдера */ htmSlider(); });
Пояснения:Первым делом мы создаем необходимые перемнные , для упрощения работы с кодом:
- обертка слайдера
- ширина слайда
- смещение обертки слайдера
- кнопки навигации
Второе действие это описание кликов на кнопки вперед/назад
Сначала я просто анимировал перемещение по клике на кнопку nextLink: с помощью функции animate() мы анимируем перемещение обертки слайдера влево на значение scrollSlider . После того, как произошло это событие, первый слайд в списке слайдов, перемещаем в конец списка, а обертке списка слайдов задаем позицию слева 0 . Но оказалось, что если по ней быстро кликнуть 10 раз, то произойдет 10 перемещений, и это реальный баг.
Событие анимации слайдера по клике на кнопку предыдущий слайд немного другое:
Первыми шагами мы задаем позицию обертки слайдов слева scrollSlider и перемещаем последний слайд в обертке в самое начало списка, но заметьте уже без анимации; вторым шагом мы анимируем изменение позиции обертки слайдера на значение 0 .
Вот так все просто)
Функция автопрокрутки слайдера аналогична анимации, которая происходит по клику на кнопку следующий слайд, ничего особенного, я ее вынес для того, чтобы корректно использовать фукнции jQuery — setInterval и clearInterval — они реально крутые)
По клике на кнопку автоматической работы слайдера, происходят следующие события:
Последним шагом инициальзируем функцию слайдера htmSlider();
Два и более слайдеров на страницеК сожалению реализовать автопрокрутку нескольких слайдеров на странице пока не получилось, а вот все остальное работает на ура. Итак, уважаемы читатели, по Вашим просьбам выкладываю скрипт нескольких циклических слайдеров:
JQuery(document).ready(function(){ //// ---> Проверка на существование элемента на странице jQuery.fn.exists = function() { return jQuery(this).length; } //// ---> Слайдер $(function(){ if($(".slider").exists()) { $(".slider").each(function(){ var slider = $(this); var slideWrap = slider.find(".slide-wrap"), nextLink = slider.find(".next-slide"), prevLink = slider.find(".prev-slide"), slideWidth = slider.find(".slide-item").outerWidth(), scrollSlider = slideWrap.position().left - slideWidth; /* Клик по ссылке на следующий слайд */ nextLink.click(function(){ if(!slideWrap.is(":animated")) { slideWrap.animate({left: scrollSlider}, 500, function(){ slideWrap .find(".slide-item:first") .appendTo(slideWrap) .parent() .css({"left": 0}); }); } }); /* Клик по ссылке на предыдующий слайд */ prevLink.click(function(){ if(!slideWrap.is(":animated")) { slideWrap .css({"left": scrollSlider}) .find(".slide-item:last") .prependTo(slideWrap) .parent() .animate({left: 0}, 500); } }); }); } }); });
Разметка второго слайдера отличается от первого только то что у контейнера.slider добавляем еще один класс, который позволит нам стилизировать второй (третий, н-ый) слайдер так как нам нужно:
...
Оформим некоторые элементы слайдера по другому (уменьшим ширину слайдера, слайда, установим другой цвет и шрифт подписи слайда):
Slider.slider2 { width: 400px; } .slider2 .slide-item { width: 180px; } .slider2 .slide-title { font: bold 12px Arial; color: #ed0000; } .slider2 .navy { padding-top: 30px; } .slider2 .slide-item img { display: block; width: 100%; }
ЗаключениеСегодня Вы увидели и научились создавать элементарный анимированный слайдер с горизонтальной прокруткой своими руками без использования плагинов. Вопросы, пожелания и благодарности оставляйте в комментариях, всего хорошего!
Одним из эффективных способов привлечения внимания пользователей на странице сайта это создание движущейся анимации. Элементы анимации помогают более наглядно рассказать и показать пользователям о вашем продукте. Последнее время большую популярность получили выезжающие панели, а также ряд других эффектов, которые появляются при прокрутке или нажатии на картинку. Они также известны как слайдеры, карусели и выезжающие панели. В данной статье речь пойдет о создании адаптивного слайдера карусельного типа, с плавным эффектом автопрокрутки.
На сегодняшний день в сети представлено сотни обзоров с ссылками на готовые решения, однако большинство из них содержат множество неиспользуемых функций, которые значительно понижают работоспособность слайдера, также как и замедляют загрузку сайта в целом. Профессиональные веб-разработчики всегда стремились создавать гибкие в настройке программные продукты, с низким порогом вхождения дополнительных библиотек и плагинов. Именно поэтому в работе нашего скрипта задействованы минимальные требования для организации такого слайдера. Функционал работы позволяет задавать интервал переключения, скорость, а также выбор определнного слайда. Ниже приведен ряд перменных, регулирующих работу самого слайдера.
timeList - скорость переключения слайда
TimeView - время показа
RadioBut - кнопки под слайдом, для быстрой навигации. По умолчанию значение true, если использовать false, то кнопки пропадут.
А теперь давайте приступим! Создадим и откроем файл index.htm
В представленном коде как мы видим ничего сложного нет, slider-wrap определяет общее положение и выравнивает слайдер по середине экрана. Параметр active-slide задает размер и высоту картинки согласно ее длине. И slider показывает только активную картинку.
Теперь создадим и откроем файл style.css и пропишем туда нужную нам разметку:
@import url("https://fonts.googleapis.com/css?family=Open+Sans|Roboto"); body { color: #4f4f5a; font-family: "Roboto", sans-serif; font-size: 16px; padding: 0; margin: 0; } #slider-wrap{ max-width:800px; margin: 0 auto; margin-top: 80px; } #active-slide { width: 100%; display: table; position: relative; overflow: hidden; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; -o-user-select: none; user-select: none; } #slider{ position: relative; width: calc(100% * 4); top: 0; left: 0; margin: 0; padding: 0; -webkit-transition: 1s; -o-transition: 1s; transition: 1s; -webkit-transition-timing-function: ease-in-out; -o-transition-timing-function: ease-in-out; transition-timing-function: ease-in-out; } .slide{ width: calc(100%/4); list-style: none; display: inline; float: left; } .slide img { width:100%; } .Radio-But{ margin-top:10px; text-align:center; } .Radio-But .ctrl-select { margin:2px; display:inline-block; width:16px; height:16px; overflow:hidden; text-indent:-9999px; background:url(radioBg.png) center bottom no-repeat; } .Radio-But .ctrl-select:hover { cursor:pointer; background-position:center center; } .Radio-But .ctrl-select.active { background-position:center top; } #prewbutton, #nextbutton { display:block; width:40px; height:100%; position:absolute; top:0; overflow:hidden; text-indent:-999px; background: url("arrowBg.png") left center no-repeat; opacity:0.5; z-index:3; outline:none !important; } #prewbutton { left:10px; } #nextbutton { right:10px; background:url(arrowBg.png) right center no-repeat; } #prewbutton:hover, #nextbutton:hover { opacity:1; }
В свойстве стиля slider-wrap пропишите width – максимальную длину ваших картинок.
В свойстве стиля #slider { width: calc(100% * 4); } и .slide { width: calc(100%/4); } укажите количество картинок в вашем слайдере. В нашем примере их 4.
Если стрелки вперед/назад мешают видимости вашего слайдера их можно сделать невидимыми и появляться они будут при наведении. Для этого в параметрах prewBut и nextBut , задайте свойству opacity значение 0.
Теперь создадим и откроем наш файл slider.js , в котором и будет код слайдера. Не забудьте подключить библиотеку jQuery.
$(document).ready(function () { var timeList = 700; var TimeView = 5000; var RadioBut = true; var slideNum = 1; var slideTime; slideCount = $("#slider .slide").length; var animSlide = function(arrow){ clearTimeout(slideTime); if(arrow == "next"){ if(slideNum == slideCount) { slideNum=1; } else{slideNum++} translateWidth = -$("#active-slide").width() * (slideNum - 1); $("#slider").css({"transform": "translate(" + translateWidth + "px, 0)"}); } else if(arrow == "prew") { if(slideNum == 1) { slideNum=slideCount; } else{slideNum-=1} translateWidth = -$("#active-slide").width() * (slideNum - 1); $("#slider").css({"transform": "translate(" + translateWidth + "px, 0)"}); }else{ slideNum = arrow; translateWidth = -$("#active-slide").width() * (slideNum -1); $("#slider").css({"transform": "translate(" + translateWidth + "px, 0)"}); } $(".ctrl-select.active").removeClass("active"); $(".ctrl-select").eq(slideNum - 1).addClass("active"); } if(RadioBut){ var $linkArrow = $("") .prependTo("#active-slide"); $("#nextbutton").click(function(){ animSlide("next"); return false; }) $("#prewbutton").click(function(){ animSlide("prew"); return false; }) } var adderSpan = ""; $(".slide").each(function(index) { adderSpan += "" + index + ""; }); $("" + adderSpan +"").appendTo("#slider-wrap"); $(".ctrl-select:first").addClass("active"); $(".ctrl-select").click(function(){ var goToNum = parseFloat($(this).text()); animSlide(goToNum + 1); }); 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 возвращает предыдущий, а числовое значение это определенно заданный слайд, выбранный через радио кнопки под слайдом.
В представленном слайдере использовались картинки с веб-ресурса https://pixabay.com/.