Делаем слайдер на JavaScript своими руками. Примеры бесплатных JQuery слайдеров для изображений Скачать красивый слайдер

Некоторое время назад, я начал осваивать jQuery. Думаю, все знают, что так называется самая популярная библиотека для разработки и создания сценариев (скриптов) на JavaScript. С её помощью очень просто создавать эффектные и интерактивные элементы сайта.

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

Итак, какие особенности нашего слайдера на jQuery (который я назвал HWSlider) можно отметить?

  • Простота использования и оформления – я хотел создать простой сценарий без наворотов, поэтому, я не использовал анимации на CSS3, а код получился очень универсальным и понятным.
  • Возможность вставлять в слайды как изображения, так и любой HTML – код.
  • Возможность прокручивать слайды как по порядку (вперёд - назад), так и выбирать каждый слайд (1,2,3,4…)
  • Автоматически формирующиеся ссылки (предыдущий – следующий, и с номерами слайдов). Вам нужно лишь вставить нужное количество div-ов, а всё остальное рассчитается само. Ну и можно отметить, что количество слайдов неограниченно.

Скрипт совместим со всеми современными браузерами: IE, Opera, Firefox, Safari, Chrome, (т.к. слайдер не использует CSS3).

Начнём с HTML разметки. В нужное место html страницы или шаблона нужно вставить.

Здесь содержание слайда 1
Здесь содержание слайда 2
Здесь содержание слайда 3

Здесь всё просто, как видно, вы можете вставлять сколько угодно слайдов путём создания новых div-ов. Внутрь их можно вставлять любой html код, например картинку или блок с текстом. Не забудьте только подключить саму библиотеку на jQuery в вместе со всеми js - скриптами. Если не знаете как, смотрите в примере.

#slider-wrap{ /* Оболочка слайдера и кнопок */ width:660px; } #slider{ /* Оболочка слайдера */ width:640px; height:360px; overflow: hidden; border:#eee solid 10px; position:relative;} .slide{ /* Слайд */ width:100%; height:100%; } .sli-links{ /* Кнопки смены слайдов */ margin-top:10px; text-align:center;} .sli-links .control-slide{ margin:2px; display:inline-block; width:16px; height:16px; overflow:hidden; text-indent:-9999px; background:url(radioBg.png) center bottom no-repeat;} .sli-links .control-slide:hover{ cursor:pointer; background-position:center center;} .sli-links .control-slide.active{ background-position:center top;} #prewbutton, #nextbutton{ /* Ссылка "Следующий" и "Педыдущий" */ display:block; width:15px; height:100%; position:absolute; top:0; overflow:hidden; text-indent:-999px; background:url(arrowBg.png) left center no-repeat; opacity:0.8; 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", нужную ширину. Так как в него вставляются все остальные блоки, то высоту можно не задавать, она будет зависеть от того, что будет внутри. Затем нам нужно задать размеры контейнера в котором будут находиться слайды. Это – #slider. Зададим ему ширину и высоту, а так же, к примеру, границу в 10 пикселей. Здесь ширина – 640px это меньше чем ширина родителя, так как мы добавляем границы шириной по 10px справа и слева. От ширины этого div-а так же зависит и ширина самих слайдов (.slide).

И последнее: нам нужно обязательно задать position:relative для контейнера слайдов так как слайды внутри - с абсолютным позиционированием. Для самих слайдов в CSS задаётся только ширина и высота. Остальные свойства задаются уже в jQuery скрипте.

Селектор.sli-links это блок, в котором будут находится кнопки перехода на необходимый слайд. Эти кнопки представляют из себя простые элементы вида номер, которые вставятся в необходимом количестве автоматически, вместе и с их родителем.sli-links. Для кнопок мы задаём красивый вид, а именно делаем каждую кнопку квадратной, выравниваем их все по центру, а так же, благодаря overflow:hidden и text-indent:-9999px, убираем текст, оставляя только фоновые иконки, которые так же меняются при наведении на этот элемент курсора. Для удобства я использовал спрайты, что уменьшило количество изображений.

Далее оформляется активная кнопка. Просто изменяем положение фона. Затем переоформим ссылки для перехода на сдедующий и предыдущий слайды. Вы можете дать им любое оформление, так же как и кнопкам. Данные ссылки вставляются автоматически внутрь #slider. Но чтобы их было видно, я задал им абсолютное позиционирование и верхний слой (z-index:3), чтобы они были отображены над слайдами. Думаю с CSS здесь всё понятно и просто: вы можете поменять практически все свойства, чтобы оформить слайдер так, как вам необходимо.

Давайте теперь рассмотрим сам сценарий:

Var hwSlideSpeed = 700; var hwTimeOut = 3000; var hwNeedLinks = true; $(document).ready(function(e) { $(".slide").css({"position" : "absolute", "top":"0", "left": "0"}).hide().eq(0).show(); var slideNum = 0; var slideTime; slideCount = $("#slider .slide").size(); var animSlide = function(arrow){ clearTimeout(slideTime); $(".slide").eq(slideNum).fadeOut(hwSlideSpeed); if(arrow == "next"){ if(slideNum == (slideCount-1)){slideNum=0;} else{slideNum++} } else if(arrow == "prew") { if(slideNum == 0){slideNum=slideCount-1;} else{slideNum-=1} } else{ slideNum = arrow; } $(".slide").eq(slideNum).fadeIn(hwSlideSpeed, rotator); $(".control-slide.active").removeClass("active"); $(".control-slide").eq(slideNum).addClass("active"); } if(hwNeedLinks){ var $linkArrow = $("") .prependTo("#slider"); $("#nextbutton").click(function(){ animSlide("next"); }) $("#prewbutton").click(function(){ animSlide("prew"); }) } var $adderSpan = ""; $(".slide").each(function(index) { $adderSpan += "" + index + ""; }); $("

").appendTo("#slider-wrap"); $(".control-slide:first").addClass("active"); $(".control-slide").click(function(){ var goToNum = parseFloat($(this).text()); animSlide(goToNum); }); var pause = false; var rotator = function(){ if(!pause){slideTime = setTimeout(function(){animSlide("next")}, hwTimeOut);} } $("#slider-wrap").hover(function(){clearTimeout(slideTime); pause = true;}, function(){pause = false; rotator(); }); rotator(); });

Сначала в переменных сохраняются настройки: hwSlideSpeed - скорость перелистывания слайдов, hwTimeOut - время спустя которое происходит автоматическая смена слайда, hwNeedLinks - управляет ссылками "Следующий " и "Предыдущий" - если значение этой переменной равно true, то эти ссылки будут отображаться, а если false, то соответственно их не будет (как на главной странице моего блога).

Далее мы устанавливаем необходимые CSS свойства для слайдов с помощью метода.css(). Блоки со слайдами мы накладываем друг на друга используя абсолютное позиционирование, затем скрываем их все.hide(), а затем показываем только первый. Переменная slideNum - это номер активного слайда, то есть счётчик.

Основная логика работы нашего jQuery слайдера - это функция animSlide. Она принимает один параметр. Если мы передадим в неё строки "next" или "prew", то сработают условные операторы и будет отображён соответственно следующий или предыдущий слайд. Если же мы пошлём в качестве значения цифру, то это число станет активным слайдом и он будет показан.

Таки образом эта функция скрывает текущий div, высчитывает новый и показывает его.

Обратите внимание, что методу.fadeIn(), который делает видимым активный слайд, задан второй аргумент. Это, так называемая функция обратного вызова. Она выполняется, когда слайд полностью появится. В данном случае это сделано для обеспечения автоматической прокрутки слайдов. Функция rotator, определённая ниже, вызывает снова функцию animSlide для перехода на следующий слайд через необходимый нам интервал времени: мы получим замыкание, обеспечивающее постоянную прокрутку.

Всё работает нормально, но нам нужно остановить выполнение автоматики, если пользователь подводит курсор к слайдеру, или нажимает кнопки. Для этого создана переменная pause. Если её значение положительно - true, значит автоматического переключения не будет. С помощью метода.hover(), мы указываем: очистить таймер если он запущен - clearTimeout(slideTime), и установить pause = true. А после отвода курсора, отключить паузу и запустить замыкание rotator().

Дополнительно нам нужно создать новые элементы на странице и поместить их в нужное место. Используя цикл each() для каждого слайда (div-а с классом.slide), создадим элемент span внутри которого бует число - номер слайда. Это число используется в функции анимации, для перехода к слайду с этим номером. Обернём всё в div с нужными классами, и в итоге получим такую разметку:

Казалось бы, зачем мы создаём разметку внутри скрипта, а не в HTML коде?. Дело в том, что например, если у пользователя отключены скрипты - он не увидит элементов, которые не будут работать, и это не введёт его в замешательство. Кроме того упрощается код, что неплохо для SEO.

В итоге разметка слайдера будет выглядеть примерно так (в качестве слайдов я использовал изображения, и установил 5 штук):

< >

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

На напоследок, пару моментов об интеграции этого слайдера с Drupal. Вы можете добавить этот код в файл шаблона, например в page.tpl.php, и прикрепить скрипт отдельными js-файлом к теме. Jquery в Drupal включен по умолчанию, но работает в режиме совместимости (). Есть два варианта доработки. Либо обернуть весь js код:

(function ($) { // Весь ваш код... })(jQuery);

или заменить символы $ во всём скрипте на jQuery. Вот так:

JQuery(document).ready(function(e) { jQuery(".slide").css({"position" : "absolute", "top":"0", "left": "0"}).hide().eq(0).show(); var slideNum = 0; var slideTime; slideCount = jQuery("#slider .slide").size(); var animSlide = function(arrow){ // и т. д.

В примере уже реализован первый метод.

Спасибо за прочтение! Оставляйте комментарии, приходите ещё. А так же вы можете подписаться на RSS, чтобы получать обновления блога первыми!

Добавлено: Это ещё не всё. Читайте . Там мы добавим новые возможности к данному скрипту.

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



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


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


Главным объектом у нас будет viewport , то есть блок, в котором мы будем видеть, как крутятся наши картинки, в нем у нас будет slidewrapper , это будет нашим блоком, содержащим в себе все изображения, выстроенными в одну линию, и который будет менять свою позицию внутри самого viewport .


Далее, по бокам внутри viewport , вертикально посередине, будут располагаться кнопки назад и вперед, при клике на которые мы также будем менять позицию нашего slidewrapper относительно viewport , тем самым вызывая эффект пролистывания картинок. И, наконец, последним объектом будут наши кнопочки навигации, находящиеся в нижней части viewport .


При клике по ним, мы просто будем смотреть на порядковый номер этой кнопочки и двигать на нужный нам слайд опять же путем смещения slidewrapper (смещение будет производиться через изменение css-свойства transform , значение которого будет постоянно вычисляться).


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


А теперь давайте же писать! Первым делом откроем наш index-файл и пропишем туда нужную нам разметку:



Как видим, ничего сложного, block-for-slider служит как раз таки блоком, в который наш слайдер будет помещен, внутри него уже сам viewport , в котором находится наш slidewrapper , он же вложенный список, здесь li являются слайдами, а img – картинками внутри них. Прошу обратить внимание на то, что все картинки должны быть одного размера или, хотя бы, пропорций, иначе слайдер будет криво смотреться, т.к. его размеры на прямую зависят от пропорций изображения.


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


body { margin: 0; padding: 0; } #block-for-slider { width: 800px; margin: 0 auto; margin-top: 100px; } #viewport { 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; } #slidewrapper { 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; } #slidewrapper ul, #slidewrapper li { margin: 0; padding: 0; } #slidewrapper li { width: calc(100%/4); list-style: none; display: inline; float: left; } .slide-img { width: 100%; }

Начнем с block-for-slider , это, повторюсь, наш блок на странице, который мы отведем под слайдер, его высота будет зависеть от его ширины и от пропорций нашего изображения, т.к. viewport занимает всю ширину block-for-slider , то и сам slide имеет такую же ширину, а, соответственно, и картинка внутри него меняет свою высоту в зависимости от ширины (пропорции сохраняются). Этот элемент на своей странице я расположил горизонтально по середине, сверху отступил 100px, сделав его позицию более удобной для примера.


Элемент viewport , как уже говорилось, занимает всю ширину нашего block-for-slider , он имеет свойство overflow:hidden , оно позволит нам скрыть нашу ленту изображений, которая вылазит за рамки viewport.


Следующее css-свойство - user-select:none , позволяет избавится от синего выделения отдельных элементов слайдера при многочисленных кликах по кнопкам.


Переходим к slidewrapper , почему же position:relative , а не absolute ? Все очень просто, т.к. если мы выберем второй вариант, то при свойстве viewport overflow:hidden нам ни покажется ровно ничего, т.к. сам viewport не станет подстраиваться под высоту slidewrapper , из-за чего будет иметь height:0 . Почему ширина имеет такое значение и зачем мы ее вообще задаем? Дело в том, что наши слайды будут иметь ширину, равную 100% от viewport , а чтобы расставить их в линию, нам нужно место, где они будут стоять, таким образом ширина slidewrapper должна равняться 100% ширины viewport , умноженной на количество слайдов (в моем случае на 4). Что касается transition и transition-timing-function , то здесь 1s значит, что смена смена положения slidewrapper будет происходить в течении 1 секунды и мы будем это наблюдать, а ease-in-out – вид анимации, при котором она сначала идет медленно, ускоряется до середины, а после снова замедляется, здесь вы уже можете установить значения по своему усмотрению.


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


Далее мы стилизуем наши слайды, их ширина должна равняться ширине viewport , но т.к. они находятся в slidewrapper , ширина которого равна ширине viewport умноженной на кол-во слайдов, то чтобы получить ширину viewport снова, нам нужно 100% от ширины slidewrapper поделить на кол-во слайдов (в моем случае, опять же, на 4). После превратим их в строчные элементы при помощи display:inline и зададим обтекание слева, добавив свойство float:left . Про list-style:none я могу сказать, что использую его для того чтобы убрать дефолтный маркер у li , в большинстве случаев является неким стандартом.


Со slide-img все просто, картинка будет занимать всю ширину slide , slide подстроится под ее высоту, slidewrapper подстроится под высоту slide , а высота viewport в свою очередь примет значение высоты slidewrapper , таким образом высота нашего слайдера будет зависеть от пропорций изображения и размеров блока, предоставленного под слайдер, о чем я уже и писал выше.


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


Откроем наш js-файл , в котором и будет код слайдера, не забудьте подключить jQuery , т.к. писать мы будем при помощи этого фреймворка. Я, к слову, на момент написания статьи, использую версию jQuery 3.1.0 . Сам же файл со скриптом необходимо подключить в самом конце тега body , т.к. мы будем работать с DOM-элементами, которые необходимо инициализировать в первую очередь.


Пока что нам нужно объявить пару переменных, одна будет хранить в себе номер слайда, который мы видим в определенный момент времени во viewport , я назвал ее slideNow , а вторая будет хранить количество этих самых слайдов, это slideCount .


var slideNow = 1; var slideCount = $("#slidewrapper").children().length);

Переменной slideNow необходимо задать начальное значение 1, т.к. при загрузке страницы мы, исходя из нашей разметки, будем видеть первый слайд во viewport .


В slideCount мы поместим количество дочерних элементов slidewrapper , тут все логично.
Далее необходимо создать функцию, которая как раз-таки и будет отвечать за переключение слайдов справа налево, объявим ее:


function nextSlide() { }

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


function nextSlide() { if (slideNow == slideCount || slideNow <= 0 || slideNow > slideCount) { $("#slidewrapper").css("transform", "translate(0, 0)"); slideNow = 1; } else { translateWidth = -$("#viewport").width() * (slideNow); $("#slidewrapper").css({ "transform": "translate(" + translateWidth + "px, 0)", "-webkit-transform": "translate(" + translateWidth + "px, 0)", "-ms-transform": "translate(" + translateWidth + "px, 0)", }); slideNow++; } }

Для начала мы проверяем, находимся ли мы сейчас на последнем слайде нашей ленты? Для этого мы берем количество всех наших слайдов при помощи $("#slidewrapper").children().length и сверяем его с номером нашего слайда, если они оказываются равными, то это значит что нам нужно начать показывать ленту заново, с 1 слайда, а значит меняем css-свойство transform у slidewrapper на translate(0, 0) , таким образом смещая его в исходное положение, чтобы в нашем поле зрения оказался первый слайд, не забудем также про –webkit и –ms для адекватного кроссбраузерного отображения (см. справочник по css-свойствам ). После этого не забудем обновить значение переменной slideNow , сообщив ей, что в поле зрения находится слайд номер 1: slideNow = 1;


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


Если же первое условие не выполняется, то это говорит о том, что мы на данный момент не находимся ни на последнем слайде, ни на каком-то несуществующем, а значит нам необходимо переключиться на следующий, сделаем мы это путем смещения slidewrapper влево на значение, равное ширине viewport , смещение снова будет происходить через знакомое нам свойство translate , значение которого будет равным "translate(" + translateWidth + "px, 0)" , где translateWidth – расстояние, на которое смещается наш slidewrapper . Кстати, объявим эту переменную вначале нашего кода:


var translateWidth = 0;

После перехода на следующий слайд скажем нашему slideNow, что мы видим следующий по счету слайд: slideNow++;


На данный момент у некоторых читателей может возникнуть вопрос: почему мы не заменили $("#viewport").width() на какую-нибудь переменную, например slideWidth , чтобы всегда иметь под рукой ширину нашего слайда? Ответ очень прост, если наш сайт адаптивный, то, соответсвтенно, блок, выделенный под слайдер тоже адаптивный, исходя из этого можно понять, что при изменении размеров ширины окна без перезагрузки страницы (например, поворот телефона на бок), ширина viewport изменится, а, соответсвенно, изменится и ширина одного слайда. В таком случае наш slidewrapper будет смещаться на значение той ширины, которая была изначально, а значит картинки будут отображаться частями или вовсе не отображаться во viewport . Записав в нашу функцию $("#viewport").width() вместо slideWidth мы заставляем ее при каждом переключении слайдов вычислять ширину viewport , тем самым обеспечивая при резком изменении ширины экрана докрутку до нужного нам слайда.


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


var slideInterval = 2000;

Время в js указывается в миллисекундах.


Теперь напишем такую конструкцию:


$(document).ready(function () { setInterval(nextSlide, slideInterval); });

Тут все проще некуда, мы через конструкцию $(document).ready(function () {}) говорим о том, что следующие действия необходимо выполнять после полной загрузки документа. Далее же мы просто вызываем функцию nextSlide с интервалом, равным slideInterval , при помощи встроенной функции setInterval .


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


Тем временем двигаемся дальше, добавим к нашему слайдеру такую функцию, как остановка прокрутки при наведении курсора, для этого нам необходимо прописать в основном блоке кода (внутри конструкции $(document).ready(function () {})) такую вещь:


$("#viewport").hover(function(){ clearInterval(switchInterval); },function() { switchInterval = setInterval(nextSlide, slideInterval); });

Чтобы начать анализировать этот код, нам нужно знать, что такое switchInterval . Во-первых, это переменная, в которой хранится периодический вызов функции nextSlide, попросту говоря, мы эту строчку кода: setInterval(nextSlide, slideInterval); , превратили в эту: switchInterval = setInterval(nextSlide, slideInterval); . После этих манипуляций наш основной блок кода принял следующий вид:


$(document).ready(function () { var switchInterval = setInterval(nextSlide, slideInterval); $("#viewport").hover(function(){ clearInterval(switchInterval); },function() { switchInterval = setInterval(nextSlide, slideInterval); }); });

Здесь я использую событие hover , что означает «при наведении», это событие позволяет отследить тот момент, когда я навожу курсор на какой-либо объект, в данном случае на viewport .


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


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


Вот и пришло время добавлять кнопки к нашему слайдеру, начнем с кнопок вперед-назад.


Первым делом разметим их:



Поначалу данная разметка может быть непонятной, скажу сразу, что обернул эти две кнопки в один div с классом prev-next-btns просто для своего удобства, вы можете этого не делать, результат от этого не изменится, сейчас мы добавим им стили и все станет ясно:


#prev-btn, #next-btn { position: absolute; width: 50px; height: 50px; background-color: #fff; border-radius: 50%; top: calc(50% - 25px); } #prev-btn:hover, #next-btn:hover { cursor: pointer; } #prev-btn { left: 20px; } #next-btn { right: 20px; }

Сначала мы позиционируем наши кнопки через position:absolute , тем самым будем свободно управлять их положением внутри нашего viewport , далее укажем размеры этих кнопок и при помощи border-radius закруглим углы так, чтобы эти кнопки превратились в круги. Цвет их будет белый, то есть #fff , а их отступ от верхнего края viewport будет равен половине высоты этого viewport минус половина высоты самой кнопки (в моем случае 25px), таким образом мы сможем их расположить вертикально по центру. Далее мы укажем, что при наведении на них, наш курсор изменится на pointer и, в конце концов, сообщим нашим кнопкам по отдельности, что они должны отступать от своих краев на 20px, чтобы мы могли их видеть так, как нам было бы удобно.


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


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


Далее, снова переходим в наш js-файл , где мы опишем работу наших кнопок. Что ж, добавим еще одну функцию, она будет показывать нам предыдущий слайд:


function prevSlide() { if (slideNow == 1 || slideNow <= 0 || slideNow > slideCount) { translateWidth = -$("#viewport").width() * (slideCount - 1); $("#slidewrapper").css({ "transform": "translate(" + translateWidth + "px, 0)", "-webkit-transform": "translate(" + translateWidth + "px, 0)", "-ms-transform": "translate(" + translateWidth + "px, 0)", }); slideNow = slideCount; } else { translateWidth = -$("#viewport").width() * (slideNow - 2); $("#slidewrapper").css({ "transform": "translate(" + translateWidth + "px, 0)", "-webkit-transform": "translate(" + translateWidth + "px, 0)", "-ms-transform": "translate(" + translateWidth + "px, 0)", }); slideNow--; } }

Она называется prevSlide , вызываться она будет только при клике на prev-btn . Сначала делаем проверку на то, находимся ли мы на 1-ом слайде или нет, здесь мы также проверяем, не вышел ли наш slideNow за границы реального диапазаона наших слайдов и, в случае, если какое-то из условий сработает, перместимся на последний слайд, сместив slidewrapper на нужное нам значение. Это значение мы вычислим по формуле: (ширина одного слайда)*(кол-во слайдов – 1), все это берем со знаком минус, т.к. смещаем его влево, получается, что viewport теперь будет показывать нам последний слайд. В конце этого блока нам также нужно сказать переменной slideNow , что сейчас в нашем поле зрения находится последний слайд.


Если же мы не находимся на первом слайде, то нам нужно сместиться на 1 назад, для этого опять же меняем свойство transform у slidewrapper . Формула такая: (ширина одного слайда)*(номер текущего слайда – 2), все это, опять же, берем со знаком минус. Но почему же -2, а не -1, нам же нужно переместиться как раз таки на 1 слайд назад? Дело в том, что если мы находимся, скажем, на 2-ом слайде, то переменная x свойства transform:translate(x,0) нашего slidewrapper уже равна ширине одного слайда, если мы ему скажем, что от номера текущего слайда нужно отнять 1, то снова получим единицу, на которую уже смещен slidewrapper , поэтому нужно будет смещать на 0 этих самых ширин viewport , а значит на slideNow - 2.



Теперь нам осталось внести в основной блок кода эти строки:


$("#next-btn").click(function() { nextSlide(); }); $("#prev-btn").click(function() { prevSlide(); });

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


Теперь добавим кнопки навигации по слайдам, снова возвращаемся в разметку:



Как видим, внутри viewport появился вложенный список, дадим ему идентефикатор nav-btns , внутри него li – наши кнопочки навигации, им присвоим класс slide-nav-btn , впрочем-то с разметкой можно и закончить, приступаем к стилям:


#nav-btns { position: absolute; width: 100%; bottom: 20px; padding: 0; margin: 0; text-align: center; } .slide-nav-btn { position: relative; display: inline-block; list-style: none; width: 20px; height: 20px; background-color: #fff; border-radius: 50%; margin: 3px; } .slide-nav-btn:hover { cursor: pointer; }

Блоку nav-btns , в котором находятся наши кнопочки, даем свойство position:absolute , для того, чтобы он не растянул viewport по высоте, т.к. у slidewrapper свойство position:relative , ширину в 100% мы задаем, чтобы при помощи text-align:center сцентрировать кнопки горизонтально относительно viewport , далее c помощью свойства bottom даем понять нашему блоку, что он от нижнего края должен находиться на расстоянии в 20px.


С кнопками мы делаем тоже самое, что и со слайдами, но при этом теперь задаем им display:inline-block , т.к. при display:inline они не реагируют на width и height , т.к. находятся в абсолютно позиционированном блоке. Цвет их сделаем белый и при помощи уже знакомого нам border-radius придадим им форму круга. При наведении на них поменяем вид нашего курсора для привычного отображения.


А теперь приступаем уже к jQuery – части :
Для начала объявим переменную navBtnId, в которой будет храниться индекс кликнутой нами кнопки:


var navBtnId = 0;
$(".slide-nav-btn").click(function() { navBtnId = $(this).index(); if (navBtnId + 1 != slideNow) { translateWidth = -$("#viewport").width() * (navBtnId); $("#slidewrapper").css({ "transform": "translate(" + translateWidth + "px, 0)", "-webkit-transform": "translate(" + translateWidth + "px, 0)", "-ms-transform": "translate(" + translateWidth + "px, 0)", }); slideNow = navBtnId + 1; } });

Здесь мы при клике по нашему slide-nav-btn вызываем функцию, которая в первую очередь присваивает переменной navBtnId индекс кликнутой кнопки, то есть ее порядковый номер, так как отсчет начинается с нуля, то если мы кликаем на вторую кнопку, то в navBtnId записывается значение 1. Далее мы делаем проверку, где прибавляем к порядковому номеру кнопки единицу, чтобы получить такое число, будто отсчет шел не с 0, а с 1, сравниваем это число с номером текущего слайда, если они совпадают, то мы не будем предпринимать никаких действий, ведь нужный слайд уже во viewport .


Если же нужный нам слайд находится не в поле зрения viewport , то вычислим расстояние, на которое нам нужно сдвинуть slidewrapper влево, далее меняем значение css-свойства transform на translate (то самое расстояние в пикселях, 0). Это мы уже делали не раз, поэтому вопросов возникнуть не должно. В конце снова сохраняем значение текущего слайда в переменную slideNow , это значение можно вычислить, прибавив к индексу кликнутой кнопки единицу.


На этом, собственно, все, если что-то не понятно, то я оставляю ссылку на jsfiddle, где будет предоставлен весь код, написанный в материале.




Спасибо за внимание!

Теги:

  • jquery slider
  • css
  • css3 animation
  • html
Добавить метки

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

Взгляните на 20 jQuery слайдеров с сайта Envato Market, и вы поймете, что бывают слайдеры, которые больше чем просто блок с плавно сменяющимися изображениями.

1. RoyalSlider – Тачскрин галерея изображений на jQuery

Сейчас адаптивный слайдер, к тому же и дружелюбный к сенсорным экранам, значит намного больше, чем раньше. RoyalSlider сочетает в себе обе функции: адаптивность и работу с сенсорными экранами. Хороший выбор, так как галерея написана на HTML5 и CSS3.

Несколько интересных функций:

JavaScript. Быстрый старт

SEO оптимизация

Высокая настраиваемость

Более 10 начальных шаблонов

Есть фолбэк для CSS3 переходов

На мой взгляд, самая крутая функция это «модульная архитектура скрипта», что позволяет отключать из основного JS файла ненужные вещи, тем самым уменьшая вес. RoyalSlider, тачскрин галерея изображений на JQuery – надежный JavaScript слайдер, который должен пополнить набор инструментов любого разработчика.

2. Slider Revolution адаптивный jQuery плагин

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

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

Параллакс эффект и пользовательская анимация

Неограниченное количество слоев и слайдов со ссылками

ready to use, глубоко настраиваемые стили

и многое другое

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

3. LayerSlider адаптивный jQuery плагин слайдер

По названию «LayerSlider адаптивный jQuery плагин слайдер» нельзя по-настоящему оценить данный слайдер.
200+ 2D и 3D переходы между слайдами вскружат голову любому.

Парочка примечательных функций:

13 скинов и 3 типа меню

Возможность разместить фиксированное изображение поверх слайдера

И JQuery фолбэк

И многое другое

Как и с предыдущим слайдером, можно добавить почти любой контент, даже HTML5 резидентный мультимедиа контент. LayerSlider оживляет слайдеры, к тому же он очень красивый.

4. jQuery Banner Rotator / Slideshow

jQuery Banner Rotator / Slideshow – довольно простой слайдер, не приносящий в жертву основной функционал.

Возможности:

Тултипы, текстовые вставки и т.д.

Превью и различные варианты просмотра компонентов

Таймер с задержкой на один слайдер или на все

Множественные переходы всех слайдов или разные переходы для каждого по отдельности

jQuery Banner Rotator / Slideshow по сравнению с другими JQuery слайдерами обладает только базовыми возможностями, но про него не стоит забывать.

5. All In One Slider – Адаптивный jQuery слайдер плагин

Любой слайдер, появляющийся в сети, обладает своим уникальным видением и решает какие-либо проблемы в своей области. Но только не этот. All In One Slider можно назвать «все включено».

Я думаю, у большинства веб-разработчиков и дизайнеров есть проверенное решение, но они всегда ищут что-то новое. А это «что-то новое» включает в себя:

Ротатор баннеров

Баннер с превью

Баннер с плейлистом

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

Карусель

Все типы слайдеров поддерживают большую часть функционала, если не весь, который необходим JQuery слайдерам. Станет ли All In One Slider вашим «все включено»?

6. UnoSlider – Адаптивный тачскрин слайдер

Если ваш слайдер не адаптивный и не поддерживает сенсорные экраны, то у вас неправильный слайдер. UnoSlider – правильный.

Этот слайдер нашел свое место под солнцем между простотой и богатым набором функций. Функции:

Поддержка тем

12 готовых тем

40 переходов

Поддержка IE6+

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

7. Master Slider — jQuery тачскрин слайдер

Ищите «один JQuery слайдер, чтоб править всеми»? Попробуйте Master Slider – JQuery тачскрин слайдер под разные размеры экрана…

Когда дело касается хорошего дизайна, этот экземпляр один из лучших:

Более 25 шаблонов

Переходы с аппаратным ускорением

Поддержка касаний и свайпов

И многое другое

Интерактивные переходы, анимированные слои и хотспоты определенно привлекут ваше внимание. Master Slider – произведение искусства.

8. TouchCarousel — jQuery контент скроллер и слайдер

TouchCarousel привлекает бесплатной поддержкой и обновлениями. Однако это не все функции этого легковесного JQuery слайдера типа карусель.

Если в названии присутствует слово «touch», можно догадаться, что слайдер полностью адаптивен и поддерживает касания. Другие функции:

SEO оптимизация

Умное автовоспроизведение

CSS3 переходы с аппаратным ускорением

Настраиваемый UI и 4 скина для фотошопа

TouchCarousel из-за своей уникальной физической прокрутки слайдов это совершенно новый уровень ощущений на мобильных устройствах.

9. Advanced Slider — jQuery XML слайдер

jQuery слайдеры можно использовать не только на сайтах. Также они могут пригодиться в веб-приложениях. Advanced Slider позволяет это сделать.

С HTML или XML разметкой этот продвинутый слайдер оказывает неизгладимое впечатление:

Анимированные слои и умное видео

100+ переходов и 150+ настраиваемых свойств

15 скинов для слайдера, 7 скинов для скроллбара и встроенная поддержка lightbox

Навигация с клавиатуры, поддержка касаний и полная настраиваемость

И многое другое

Однако самая лучшая особенность это Advanced Slider — jQuery XML Slider API, что делает слайдер идеальным вариантов для вашего веб-приложения.

10. jQuery Slider Zoom In/Out Effect Fully Responsive

Один из тех JQuery слайдеров, которые заставят вас посмотреть демо, прежде чем вы начнете читать о его возможностях. Вы просто захотите понять, что же значит этот «zoom in/out effect».

Эффект зума довольно слабый, но он добавляет ощущение контроля и настоящего касания изображения в то время, как остальные слайдер статические. Особенные возможности слайдера:

CSS3 переходы между слоями

Параметр окончания анимации для слоев

Варианты фиксированной ширины, на весь экран и на всю ширину

Анимированный текст с HTML и CSS форматированием

Большинство слайдеров пытаются вобрать в себя как можно больше эффектов, а в jQuery Slider Zoom In/Out Effect Fully Responsive есть только эффект Ken Burns, но зато хорошо реализованный.

11. jQuery Carousel Evolution

Как и у вышеупомянутого Advanced Slider — jQuery XML Slider, у jQuery Carousel Evolution есть свой API, который можно использовать для повышения функционала или интеграции слайдера в другой проект.

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

С изображениями, HTML разметкой, YouTube и Vimeo видео вы также получите:

SEO оптимизацию

9 стилей карусели

Эффекты тени и отражения

Размер изображений можно настроить, как передних, так и задних

jQuery Carousel Evolution – простая карусель с множеством вариантов использования.

12. Sexy Slider

Sexy Slider уже не такой сексуальный как раньше. Однако из-за своего возраста данный слайдер заслуживает доверия.

На первый взгляд слайдер не сильно впечатляет, но если его хорошо настроить, он отлично впишется в ваш дизайн. Возможности:

Автопроигрывание слайдов

Подписи к изображениям

Непрерывное проигрывание слайдов

6 эффектов перехода

Sexy Slider ждет, когда вы откроете всю его мощь и раскроете потенциал.

13. jQuery Image & Content Scroller w/ Lightbox

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

jQuery Image & Content Scroller w/ Lightbox поддерживает ввод с клавиатуры и колесо мыши, а также и другие возможности:

Горизонтальная и вертикальная ориентация

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

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

Встроенные изображения, Flash, iframe, Ajax и инлайновый контент

Также в слайдере есть встроенный lightbox. По желанию в jQuery Image & Content Scroller w/ Lightbox можно не запускать сам слайдер, а отдельно запустить lightbox.

14. Translucent – Адаптивный ротатор баннеров / слайдер

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

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

6 разных стилей

4 эффекта переходов

2 перехода по свайпу

Настраиваемые кнопки и подписи

Как и другие, данный слайдер поддерживает касания, адаптивен и имеет аппаратное ускорение. Translucent – слайдер с минимальным дизайном, который во главу угла ставит сам контент.

15. FSS — Full Screen Sliding Website Plugin

Вы хотите сделать полноэкранный сайт, состоящий из слайдов? Тогда вам нужен FSS.

На самом деле, с помощью данного JQuery слайдера крайне легко создать полноэкранный сайт-слайдер. Возможности:

Поддержка AJAX

Скроллбар

Поддержка технологии deep linking

2 разных эффекта переходов

Также стоит обратить на поддержку клавиатуры и 11-ти страничный гайд. Однако настоящее впечатление вызывает вес FSS, всего 5Кб.

16. Zozo Accordion – Адаптивный тачскрин слайдер

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

Эта красотка с CSS3 анимацией также имеет довольно широкий набор функций:

Горизонтальный и вертикальный аккордеон

Семантический HTML5 и SEO оптимизация

Поддержка касаний, клавиатуры и WAI-ARIA

Более 10 скинов и 6 макетов

И многое другое

У Zozo Accordion бесплатная поддержка и постоянные обновления, а также все функции, которые вы хотите увидеть в JQuery аккордеоне.

17. jQuery Responsive OneByOne Slider Plugin

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

CSS3 анимация работает из-под Animate.css, она легкая, состоит из нескольких слоев и дружит с мобильными устройствами. Несколько функций:

Есть также опция навигации с помощью drag and drop. jQuery Responsive OneByOne Slider Plugin работает на основе карусели Twitter Bootstrap.

18. Accordionza — jQuery плагин

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

Если вам не понравились три варианта стилей, можете подправить HTML и CSS самостоятельно. Возможности:

Навигация с клавиатуры

Легкие в настройке эффекты и кнопки

Техника прогрессивного улучшения – работает без JavaScript

Помните, что Accordionza может отображать множество вариантов смешенного контента, что делает его крайне гибким.

19. mightySlider – Адаптивный многоцелевой слайдер

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

Под капотом вы найдете множество опций:

Поддержка клавиатуры, мышки и касаний

CSS3 переходы с аппаратным ускорением

Чистая валидная разметка и SEO оптимизация

Неограниченное число слайдов, слои для подписей и эффекты к ним

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

20. Parallax Slider — Адаптивный jQuery плагин

Parallax Slider работает как jQuery Responsive OneByOne Slider Plugin и позволяет анимировать каждый слой отдельно внутри одного слайда. Анимировать можно все слайды или даже всего один, добавив параллакс анимацию.

В комплекте идет 4 слайдера разных типов, все с параллакс эффектом. Как и другие JQuery слайдеры, он имеет:

Полную настраиваемость

Поддержку касаний

Полностью адаптивен, неограниченное число слоев

Автопроигрывание, зацикливание, настройку высоты и ширины, а также таймер

Анимированные слои это не только текст или изображения. Также можно добавить YouTube, Vimeo и HTML5 видео. Parallax Slider – еще один хороший пример того, как можно имитировать Flash эффекты даже лучше чем сам Flash, которые к тому же поддерживаются на всех устройствах.

Заключение

Любопытно наблюдать за тем, как jQuery слайдеры выросли из чего-то, что просто сменяет одно изображение другим, в огромный набор креативных инструментов. Сейчас есть 3D, параллакс слайдеры, слайдеры на всю страницу, адаптивные и те, которые можно просматривать как на десктопных компьютерах, так и на смартфонах.

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

Ну или просмотрите другие слайдеры на Envato Market – там есть из чего выбрать. А какой ваш любимый JQuery слайдер, и почему?

Нужно добавить кнопки "вперед" и "назад".

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

HTML код для нового слайдера

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

>
В продолжение темы:
Asus

Чтобы строки маркированного списка как-то выделить от основного текста, можно сделать так, чтобы цвет маркеров в списке отличался от цвета текста.По умолчанию стоит черная...

Новые статьи
/
Популярные