Css слайдер с прокруткой мышкой. Простой адаптивный тач jQuery слайдер. Карусель с использованием bootstrap

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

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

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/.

Нужен простой слайдер с автоматической прокруткой. Приступим...

Описание работы слайдера.

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

Красной рамкой показана видимая часть слайдера.

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

Когда слайдер доходит до конца, на место последнего слайда мгновенно помещается его копия из начала слайдера. Затем цикл снова повторяется. Таким образом создается иллюзия бесконечного слайдера.

HTML разметка

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

Стили слайдера .slider-box{ width : 320px ; height : 210px ; overflow : hidden ; } .slider{ position : relative ; width : 10000px ; height : 210px ; } .slider img{ float : left ; z-index : 0 ; }

Контейнер.slider-box задает размеры слайдера. С помощью свойства overflow:hidden скрываются все элементы которые не входят в область внутри элемента.

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

Слайды выравниваются с помощью свойства float:left.

Ниже показано схематичное расположение блоков слайдера.

Скрипт

Движение слайдов будет осуществляться с помощью плавного изменения свойства margin-left контейнера.slider.

$(function () { var width= $(".slider-box" ) .width () ; // Ширина слайдера. interval = 4000 ; // Интервал смены слайдов. $(".slider img:last" ) .clone () .prependTo (".slider" ) ; // Копия последнего слайда помещается в начало. $() .eq (1 ) .clone () .appendTo (".slider" ) ; // Копия первого слайда помещается в конец. // Контейнер.slider сдвигается влево на ширину одного слайда. setInterval("animation()" , interval) ; // Запускается функция animation(), выполняющая смену слайдов. } ) ; function animation() { var margin = parseInt($(".slider" ) .css ("marginLeft" ) ) ; // Текущее смещение блока.slider width= $(".slider-box" ) .width () , // Ширина слайдера. slidersAmount= $(".slider" ) .children () .length ; // Количество слайдов в слайдере. if (margin!= (- width* (slidersAmount- 1 ) ) ) // Если текущий слайд не последний, { margin= margin- width; // то значение margin уменьшается на ширину слайда. } else { // Если показан последний слайд, $(".slider" ) .css ("margin-left" , - width) ; // то блок.slider возвращается в начальное положение, margin=- width* 2 ; } $(".slider" ) .animate ({ marginLeft: margin} , 1000 ) ; // Блок.slider смещается влево на 1 слайд. } ;

В итоге получился простой слайдер с бесконечной автоматической прокруткой.

Фикс от 18 января 2013:
Устранен баг с автопрокруткой при переключении вкладок или при сворачивании окна браузера. Убрана проверка наличия атрибута name у ссылок вперед/назад.
Обновлен архив с исходниками.
Фикс от 19 июня 2013:
Добавлена возможность использовать несколько слайдеров на странице, пока без поддержки автопрокрутки, поэтому архив с исходниками и страницу демо не обновлял.
Поправил баг появления картинок под стрелочками
О том как запустить автопрокрутку без нажатия на кнопку play я ответил во

Слайдеры (ротаторы контента[изображений, текста, видео]) присутствуют в каждом проекте. В интернете, реально, куча проектов, где можно скачать и подобрать по своему вкусу практически любой плагин слайдера. Однако, бывают ситуации, когда подключать к проекту слайдер, минимизированная версия которого весит от 10Кб — нецелесообразно.

Допустим, Вам требуется сделать слайдер, который содержит 15-20 картинок с подписями или пару тройку видеороликов. Именно для таких случаев Вам и пригодится данный урок, где Вы научитесь делать слайдер с горизонтальной прокруткой , причем не оптимизированный скрипт будет весить меньше 2Кб. Нажав ниже кнопку «Demo» Вы можете посмотреть демонстрацию урока, а кликнув по кнопке «Source», получите архив урока (с комментариями), кстати чтобы научиться делать простой слайдер на миниатюрах прочтите .

Для понимания, сути скажу, что в конце урока мы получим слайдер с такими функциями:

  • Переключение слайдов влево-вправо
  • Режим автоматической работы слайдера, кнопки старт-пауза
  • Неограниченное количество слайдов
Разметка слайдера

Разметка слайдера очень проста, нам понадобится:

  • общий контейнер (slider),
  • Три контейнера для навигации (две кнопки на предыдущий/следующий слайд (navy) и одна кнопка(auto) для кнопок старт/пауза),
  • контейнер для всех слайдов (slide-list),
  • обертка всех слайдов (slide-wrap).
... тут будут слайды в контейнере slide-item Первый слайд Стили слайдера

Для стилизации слайдера, добавим чучуть правил в файл стилей.

/* Задаем сброс обтекания */ .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 — они реально крутые)

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

  • Если у кнопки установлен клас play, то меняем этот класс на pause, скрываем кнопки вперед/назад [чтобы они не нарушали работу слайдера], и запускаем с помощью переменной timer автопрокрутку.
  • Если у кнопки установлен класс pause, то меняем этот класс на start, показываем кнопки вперед/назад и прекращаем работу переменной timer, которая запускает автопрокрутку.
  • Последним шагом инициальзируем функцию слайдера 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%; }

    Заключение

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

  • Изучаем jQuery
  • Может быть полезным:

    • Лагерь для подростков в подмосковье лучших детских лагерей подмосковья.
    • Слайдер с прокруткой (карусель)

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

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

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

      prev next

      • Подпись к фото 1
      • Подпись к фото 2
      • Подпись к фото 3

      Всю конструкцию мы помещаем в общий контейнер с классом 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. В движке данного плагина используются CSS3 анимации, но в то же время, предусмотрены фолбэки для более старых версий браузеров. Glide.js прост и легковесен.

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

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

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

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

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

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

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

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

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

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

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

    Настройки

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

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

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

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

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

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

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