Простий адаптивний тач jQuery слайдер. Добірка адаптивних слайдерів Слайдери для зображень js

Але оскільки ми розуміємо з вами основи JS, то для вивчення бази я опишу, як створити найпростіший слайдер лише за допомогою JavaScript. Ну що ж, давайте приступимо до аналізу матеріалу!

Які види слайдерів бувають і де вони можуть знадобитися?

Створення зручних галерей для перегляду зображень потрібно на всіх веб-сервісах, де є хоч якісь фотографії. Це можуть бути інтернет-магазини, сайти-портфоліо, новинні та навчальні сервіси, сайти компаній та розважальних закладів з фотозвітами тощо.

Однак це стандартне застосування слайдерів. Подібні технології також використовують для залучення клієнтів до акційних товарів, послуг або для опису переваг підприємств.

Здебільшого замовники просять запроваджувати на веб-сторінки галереї типу «Карусель». Це зручний інструмент для перегляду зображень у великому розмірі з можливістю перемикання користувачем слайдів уперед та назад. При цьому самі зображення зазвичай перемикаються автоматично через певний час. Карусель такий механізм прозвали через те, що показ картинок повторюється по колу.

На сьогоднішній день за бажанням в інтернеті можна знайти найнезвичайніші та найпривабливіші плагіни для перегляду набору фотографій.

Самостійна діяльність

Ну, а тепер займемося створенням свого слайдера. На даному етапі навчання я пропоную вам використовувати чистий JavaScript. Це буде автоматичний перемикач картинок по колу.

Нижче я прикріпив програмний код своєї програми. По ходу коду я залишав вам коментарі.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 /*Описую зовнішній вигляд каркаса, основи для майбутнього слайдера */ #slides( position: relative; height: 415px; width: 100%; padding: 0px; list-style-type: none; box-shadow: 0 0 7px #01 , 0 0 10px blue, 0 0 15px #010, 0 0 35px #010; ) /* Редагую відображення картинок*/ img ( width: auto; height: 390px; padding: 13px; ) відображатися центром елемента-батька, тобто. у разі по центру елемента ul - основи для слайдів */ li ( text-align: center; ) /*Описую зовнішній вигляд самих слайдів */ .slide( position: absolute; opacity: 0; top: 0px; left: 0px; height: 100%; z-index: 100%; background: blue; стає видимим і висувається на передній план * /. Showing (opacity: 1; z-index: 4;)
var MySlider = document.querySelectorAll("#slides .slide"); var currentPicture = 0; var IntervalForChange = setInterval(nextSlide,2700); function nextSlide()( MySlider.className = "slide"; currentPicture = (currentPicture+1)%MySlider.length; MySlider.className = "slide showing"; )

Автоматичний перемикач зображень /*Описую зовнішній вигляд каркаса, основи для майбутнього слайдера */ #slides( position: relative; height: 415px; width: 100%; padding: 0px; list-style-type: none; box-shadow: 0 7px #010, 0 0 10px blue, 0 0 15px #010, 0 0 35px #010; ) /* Редагую відображення картинок*/ img ( width: auto; height: 390px; пунктів списку відображатиметься в центрі елемента-батька, тобто. в даному випадку по центру елемента ul - основи для слайдів * / li (text-align: center;) / * Описую зовнішній вигляд самих слайдів * / . slide (position: absolute; opacity: 0; top: 0px; left: 0px; height: 100%; z-index: 100%; background: blue; стає видимим і висувається на передній план * /. Showing (opacity: 1; z-index: 4;)

var MySlider = document.querySelectorAll("#slides .slide"); var currentPicture = 0; var IntervalForChange = setInterval(nextSlide,2700); function nextSlide()( MySlider.className = "slide"; currentPicture = (currentPicture+1)%MySlider.length; MySlider.className = "slide showing"; )

Я сподіваюся, що жодних проблем із кодом на css і html у вас не виникло. А ось роботу скрипта я вважаю за потрібне розібрати. Тому давайте перейдемо до розшифрування написаного.

Отже, спочатку за допомогою методу querySelectorAll змінної MySlider я присвоюю список всіх елементів у зазначених переділах. Вказує цей запис

document.querySelectorAll ("#slides .slide")

Таким чином, MySlider зберігає колекцію з чотирьох елементів.

Далі я задаю, з якого зображення починати показ, привласнюючи змінної поточноїзображення нуль. Після вказую, що зміна слайдів відбувається через 2,7 секунд і при цьому повинна бути викликана функція обробки nextSlide .

Переходимо до самої функції.

Спочатку для поточного елемента списку змінюю опис класів, тобто. переписую "slide showing" на "slide". Отже, зображення стає невидимим.

Тепер визначаю новий елемент колекції, який відображатиметься на екрані. Для цього я беру поточну позицію +1. Ви могли помітити, що я також використовую поділ із залишком (%) на кількість наявних слайдів. Цей фінт вухами потрібний для того, щоб запустити показ по новому колу. Ось як це виглядатиме буквально.

Потрібно додати кнопки "вперед" та "назад".

Для цього потрібно доповнити написаний код раніше.

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

Уся структура слайдера залишиться незмінною. До розмітки додадуться два контейнери, які виконуватимуть функцію кнопок.

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

Кнопки займуть своє місце завдяки абсолютному позиціонуванню щодо контейнера.

Slider-box( position : relative ; width : 320px ; height : 210px ; overflow : hidden ; ) .slider( position : relative ; width : 10000px ; box .prev , .slider-box .next( position : absolute ; top : 100px ; display : block ; width : 29px ; height : 29px ; cursor : pointer ; ). ../images/slider_controls.png ) no-repeat 0 0 ; ) .slider-box .next( right : 10px ; background : url (../images/slider_controls.png ) no-repeat -29px 0 ; )

Скрипт

Слайдер автоматично прокручується. За замовчуванням рух йде ліворуч, але при необхідності можна змінити напрямок його руху за допомогою змінної course. При зміні значення змінної з 1 на -1 відбудеться зміна напрямку руху слайдера.

Зображення в слайдері не повинні змінюватися, коли курсор знаходиться в межах слайдера. Навіщо це робиться? Все просто. Якщо курсор миші розташований на слайдері, то відвідувач сайту зацікавився його вмістом. У цей час не варто змінювати слайди автоматично.

$(function() ( var slider = $(".slider" ) , sliderContent = slider.html () , // Вміст слайдера slideWidth = $(".slider-box" ) .outerWidth () , // Ширина слайдера slideCount = $(".slider img" ) .length , // Кількість слайдів prev = $(".slider-box .prev" ) , // Кнопка "назад" next = $(".slider-box .next" ) , // Кнопка "вперед" sliderInterval = 3300, // Інтервал зміни слайдів animateTime = 1000, // Час зміни слайдів course = 1, // Напрямок руху слайдера (1 або -1) margin = - slideWidth; (".slider img:last" ) .clone () .prependTo (".slider" ) ; // Копія останнього слайда міститься на початок. (".slider" ) // Копія першого слайда поміщається в кінець $(".slider"). () (// Запускається функція animation(), що виконує зміну слайдів. interval = window.setInterval (animate, sliderInterval) ; ) function animate() ( if (margin==- slideCount* slideWidth- slideWidth) ( // Якщо слайдер дійшов до кінця slider.css (( "marginLeft" :- slideWidth) ) ) // то блок.slider повертається в початкове положення margin=- slideWidth* 2 ; else if (margin== 0 && course==- 1 ) ( // Якщо слайдер знаходиться на початку і натиснута кнопка "назад" slider.css (( "marginLeft" :- slideWidth* slideCount) ) // // то блок.slider переміщається в кінцеве положення margin = - slideWidth * slideCount + slideWidth; ) slider.animate (( "marginLeft" : margin) , animateTime) ; // Блок.slider зміщується вліво на 1 слайд. (function () ( // Натиснута кнопка "назад" var course2 = course; course = - 1; animate() ;); // Виклик функції animate() course = course2; ) ) ; next.click (function () ( // Натиснута кнопка "назад" if (slider.is (":animated" ) ) ) ( return false ; ) // Якщо не відбувається анімація var course2 = course; // Тимчасова змінна для зберігання значення course course = 1; // Встановлюється напрямок слайдера справа наліво animate(); slider.add (next) .add (prev) .hover (function () ( // Якщо курсор миші в межах слайдера sliderStop() ; // Викликається функція sliderStop() для припинення роботи слайдера ) , nextSlide) ; // Коли курсор йде зі слайдера, анімація відновлюється. nextSlide() ; // Виклик функції nextSlide()));

Вийшов такий слайдер з кнопками "вперед" та "назад"

Це адаптивний слайдер тач, написаний на 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 Колбек, який запуститься за ініціалізацією плагіна
допереходу 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")

Почну з того, що ця стаття написана з метою розповісти про те, як створюється слайдер прокручування зображень для веб-сторінок. Ця стаття в жодному разі не несе навчального характеру, вона лише служить прикладом того, як можна реалізувати наш об'єкт розгляду. Код, наданий у цій статті, ви можете використовувати як якийсь шаблон для подібних розробок, сподіваюся, що мені вдасться докладно і доступно донести до читача всю суть написаного мною.



А тепер до справи, недавно мені потрібно було поставити слайдер на один сайт, але пошукавши в інтернеті готові скрипти я не знайшов нічого путнього, т.к. якісь працювали не так як мені потрібно, а інші взагалі не запускалися без помилок у консолі. Використовувати 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; -ms-user-select: none; position: relative; width: 100% * top; 0; -transition-timing-function: ease-in-out; -o-transition-timing-function: ease-in-out; : 0; padding: 0; ) #slidewrapper li ( width: calc(100%/4); list-style: none; display: inline; float: left; ) .

Почнемо з 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 - вид анімації, при якому вона спочатку йде повільно, прискорюється до середини, а потім знову сповільнюється, тут ви вже можете встановити значення на свій розсуд.


Наступний блок властивостей задає шпильки, і його дочірнім елементам нульові відступи, тут коментарі зайві.


Далі ми стилізуємо наші слайди, їх ширина повинна дорівнювати ширині 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 slideCount) ( $("#slidewrapper").css("transform", "translate(0, 0)"); slideNow = 1; ) else ( translateWidth = -$("#viewport").width() * (slideNow); $("#slidewrapper").css(( "transform": "translate(" + translateWidth + "px, 0)") 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;


У цю ж умову входить перевірка на те, що номер слайду, який ми бачимо, знаходиться в межах кількості наших слайдів, якщо якимось чином це не виконається, то знову повернемося на перший слайд.


Якщо ж перша умова не виконується, то це говорить про те, що ми на даний момент не знаходимося ні на останньому слайді, ні на якомусь неіснуючому, а значить нам необхідно переключитися на наступний, зробимо ми це шляхом зміщення 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 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); ( "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; background-color: border-radius: 50%;

Блоку nav-btns , в якому знаходяться наші кнопочки, даємо властивість position:absolute , щоб він не розтягнув viewport по висоті, т.к. у slidewrapper властивість position:relative , ширину в 100% ми задаємо, щоб за допомогою text-align:center сцентрувати кнопки горизонтально щодо viewport , далі за допомогою властивості 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, де буде надано весь код, написаний у матеріалі.




Дякую за увагу!

Теги: Додати теги

1. Чудове jQuery слайд-шоу

Велике ефектне слайд-шоу із використанням jQuery технологій.

2. jQuery плагін "Scale Carousel"

Масштабоване слайд-шоу за допомогою jQuery. Ви зможете встановити розміри для слайд-шоу, які вам найбільше підходять.

3. jQuery плагін "slideJS"

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

4. Плагін «JSliderNews» 5. CSS3 jQuery слайдер

Під час наведення курсору на стрілки навігації з'являється кругла мініатюра наступного слайда.

6. Симпатичний jQuery слайдер «Presentation Cycle»

jQuery слайдер з індикатором завантаження зображень. Передбачено автоматичну зміну слайдів.

7. jQuery плагін «Parallax Slider»

Слайдер з об'ємним ефектом фону. Родзинка цього слайдера рух фону, який складається з декількох шарів, кожен з яких прокручується з різною швидкістю. У результаті виходить імітація об'ємного ефекту. Виглядає дуже красиво, ви можете самі переконатися в цьому. Більш плавно ефект відображається в таких браузерах як Opera, Google Chrome, IE.

8. Свіжий, легкий jQuery слайдер "bxSlider 3.0"

На демонстраційній сторінці розділу «examples» ви зможете знайти посилання на всі можливі варіанти використання цього плагіна.

9. jQuery слайдер зображень, плагін "slideJS"

Стильний jQuery слайдер, безумовно, зможе прикрасити ваш проект.

10. jQuery плагін слайд-шоу «Easy Slides» v1.1

Простий у використанні JQuery плагін для створення слайд-шоу.

11. Плагін «jQuery Slidy»

Легкий jQuery плагін у різному виконанні. Передбачено автоматичну зміну слайдів.

12. jQuery CSS галерея з автоматичною зміною слайдів

Якщо відвідувач протягом певного часу не натисне на стрілки "Вперед" або "Назад", то галерея почне прокручуватися автоматично.

13. jQuery слайдер "Nivo Slider"

Дуже професійний якісний легкий плагін із валідним кодом. Передбачено багато різних ефектів зміни слайдів.

14. jQuery слайдер "MobilySlider"

Свіжий слайдер. jQuery слайдер з різними ефектами зміни зображень.

15. jQuery Плагін «Slider²»

Легкий слайдер із автоматичною зміною слайдів.

16. Свіжий javascript слайдер

Слайдер із автоматичною зміною зображень.

Плагін для реалізації слайд-шоу із автоматичною зміною слайдів. Можна управляти показом за допомогою мініатюр зображень.

jQuery CSS слайдер зображень за допомогою плагіна NivoSlider .

19. jQuery слайдер «jShowOff»

Плагін для ротації вмісту. Три варіанти використання: без навігації (з автоматичною зміною у форматі слайд-шоу), навігацією у вигляді кнопок, навігацією у вигляді мініатюр зображень.

20. Плагін "Shutter Effect Portfolio"

Свіжий jQuery плагін для оформлення портфоліо фотографа. У галереї реалізовано цікавий ефект зміни зображень. Фотографії змінюють одна одну з ефектом, схожим на роботу затвора об'єктива.

21. Легкий javascript CSS слайдер "TinySlider 2"

Реалізація слайдера зображень за допомогою javascript і CSS.

22. Неймовірний слайдер «Tinycircleslider»

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

23. Слайдер зображень на jQuery

Легкий слайдер "Slider Kit". Слайдер представлений у різному виконанні: вертикальний та горизонтальний. Також реалізовані різні види навігації між зображеннями: за допомогою кнопок «Вперед» та «Назад», за допомогою колеса миші, за допомогою кліку миші по слайду.

24. Галерея з мініатюрами "Slider Kit"

Галерея "Slider Kit". Прокручування мініатюр здійснюється як у вертикальному, так і горизонтальному напрямку. Перехід між зображеннями здійснюється за допомогою: колеса миші, натискання миші або наведення курсору на мініатюру.

25. jQuery слайдер вмісту "Slider Kit"

Вертикальний та горизонтальний слайдер контенту на jQuery.

26. jQuery слайд-шоу "Slider Kit"

Слайд-шоу з автоматичною зміною слайдів.

27. Легкий професійний javascript CSS3 слайдер

Акуратний слайдер на jQuery та CSS3, створений у 2011 році.

jQuery слайд-шоу з мініатюрами.

29. Просте jQuery слайд-шоу

Слайд-шоу з навігаційними кнопками.

30. Неймовірне слайд-шоу jQuery «Skitter»

jQuery плагін "Skitter" для створення приголомшливого слайд-шоу. Плагін підтримує 22 (!) види різних анімаційних ефектів під час зміни зображень. Може працювати з двома варіантами навігації за слайдами: за допомогою номерів слайдів та за допомогою мініатюр. Обов'язково подивіться демонстрацію, дуже якісна знахідка. Технології, що використовуються: CSS, HTML, jQuery, PHP.

31. Слайд-шоу "Awkward"

Функціональне показ слайдів. У вигляді слайдів можуть виступати: прості зображення, зображення з підписами, зображення з підказками, відео-ролики. Для навігації можна використовувати стрілки, посилання на номери слайдів та клавіші праворуч/ліворуч на клавіатурі. Слайд-шоу виконано у кількох варіантах: з мініатюрами та без них. Для перегляду всіх варіантів пройдіть посилання Demo #1 - Demo #6 розташованим зверху на демонстраційній сторінці.

Дуже оригінальне оформлення слайдера зображень, що нагадує віяло. Анімована зміна слайдів. Навігація між зображеннями здійснюється за допомогою стрілок. Передбачено також автоматичну зміну, яку можна вмикати та вимикати за допомогою кнопки Play/Pause, розташованої зверху.

Анімований jQuery слайдер. Фонові зображення автоматично масштабуються при зміні розміру вікна браузера. Для кожного зображення випливає блок із описом.

34. "Flux Slider" слайдер на jQuery та CSS3

Новий jQuery слайдер. Декілька класних анімованих ефектів при зміні слайдів.

35. jQuery плагін «jSwitch»

Анімована галерея jQuery.

Легке слайд-шоу на jQuery з автоматичною зміною слайдів.

37. Нова версія плагіна "SlideDeck 1.2.2"

Професійний слайдер контенту. Можливі варіанти автоматичної зміни слайдо, а також варіант з використанням колеса миші для переходу між слайдами.

38. jQuery слайдер «Sudo Slider»

Легкий сладер зображення на jQuery. Дуже багато варіантів реалізації: горизонтальна та вертикальна зміна зображень, з посиланнями на номер слайда і без них, з підписами зображень та без, різні ефекти зміни зображень. Існує функція автоматичної зміни слайдів. Посилання на приклади реалізації можна знайти на демонстраційній сторінці .

39. jQuery CSS3 слайд-шоу

Слайд-шоу із мініатюрами підтримує режим автоматичної зміни слайдів.

40. jQuery слайдер "Flux Slider"

Слайдер з безліччю ефектів зміни зображень.

41. Простий jQuery слайдер

Стильний слайдер зображень на jQuery.



Подібні публікації