Slick — лучший адаптивный слайдер для сайта
Slick slider — это jQuery плагин для быстрого создания на сайте адаптивного слайдера любой сложности. Его функционал позволяет реализовать зацикливание, автопроигрывание, эффекты перехода и многое другое. Отдельно выделю возможность пролистывания слайдера пальцем на устройствах с сенсорным экраном.
Подключение осуществляется следующим образом.
// если ещё не подключен jQuery <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <script src="/slick/slick.min.js"></script> <link rel="stylesheet" type="text/css" href="/slick/slick.css"/> <link rel="stylesheet" type="text/css" href="/slick/slick-theme.css"/>
Подготавливаем разметку. Для этого каждый слайд оборачиваем в «div», внутри которого будет какое-то содержимое:
<div class="slider single-item"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div>
Примеры использования
Рассмотрим примеры вызова «Slick slider» с разными настройками.
Вызов без параметров
При вызвове без параметров получим один активный слайд с навигационными стрелками.
$('.single-item').slick();
Несколько слайдов
Отобразим 3 слайда с параметрами зацикленной прокрутки (infinite), отображением навигационных точек (dots) и количеством прокручиваемых за раз слайдов (slidesToScroll).
$('.multiple-items').slick({ infinite: true, dots: true, slidesToShow: 3, slidesToScroll: 1 });
Режим центрирования
В режиме центрирования активный слайд устанавливается по центру с классом «slick-center».
$('.center').slick({ centerMode: true, slidesToShow: 3, });
Адаптивность
Если на сайте адаптивная верстка, то слайдер можно подстроить под ширину экрана. Для этого используйте свойство «responsive». Оно позволяет установить для разных разрешений индивидуальные настройки. Рассмотрим пример.
$('.slick-example').slick({ infinite: true, dots: true, slidesToShow: 3, slidesToScroll: 1, responsive: [ { breakpoint: 768, settings: { slidesToShow: 2, } }, { breakpoint: 480, settings: { slidesToShow: 1, } } ] });
Здесь по умолчанию устанавливается отображение в ряд 3 слайда. Если ширина видимой области браузера от 768 до 481 пикселя — 2. И один, если ширина менее 480 пикселей.
В настройках адаптивности можно задавать любые параметры. Например, на мобильной версии сайта можно отключить стрелки навигации.
Настройки
В таблице приведены основные настройки. Полный перечень на сайте разработчика.
Параметр | Тип | Default | Описание |
---|---|---|---|
adaptiveHeight | boolean | false | Включает адаптирование высоты для одиночкного слайда горизонтальной карусели |
autoplay | boolean | false | Автоматическая прокрутка |
autoplaySpeed | int(ms) | 3000 | Скорость автопрокрутки в милисекундах |
arrows | boolean | true | Показ/скрытие навигационных кнопок |
prevArrow | html | button | Замена стандартной кнопки Preview |
nextArrow | html | button | Замена стандартной кнопки Next |
dots | boolean | false | Показ/скрытие навигационных точек под слайдером |
draggable | boolean | true | Включает/выключает способность перелистывания слайдера перетаскиванием мышью |
fade | boolean | false | Эффект затухания при перелистывании слайдов |
focusOnSelect | boolean | false | Устанавливает фокус на выбранный элемент карусели при клике |
easing | string | 'linear' | Анимационные эффекты перехода, их набор зависит от подключенных jQuery Easing плагинов |
edgeFriction | integer | 0.15 | Сопротивление при попытки прокрутить карусель, когда дальше нет слайдов и она не зацилена |
infinite | boolean | true | Бесконечное прокручивание (зацикливание) |
initialSlide | integer | 0 | Номер слайда, с которого начинать показ |
lazyLoad | string | 'ondemand' | Тип подгрузки слайдов. Принимает 'ondemand' или 'progressive' |
pauseOnHover | boolean | true | Пауза автопроигрывания при наведении мыши |
pauseOnDotsHover | boolean | false | Пауза автопроигрывания при наведении мыши на навигационные точки |
pauseOnHover | boolean | true | Пауза автопроигрывания при наведении мыши |
rows | int | 1 | Может быть 'window', 'slider' или 'min' |
Методы
Методы — это функции, которые могут совершить со слайдером какие-то действия или сообщать о его текущем состоянии. Метод можно вызывать в любом JS обработчике, например, при нажатии на кнопку.
slickCurrentSlide — возвращает номер текущего слайда. Отсчёт ведётся с нуля.
$('.single-item').slick('slickCurrentSlide');
slickGoTo — переходит к слайду с указанным номером.
$('.single-item').slick('slickGoTo',4);
slickNext — прокручивает на один слайд вперёд.
$('.single-item').slick('slickNext');
slickPrev — прокручивает на один слайд назад.
slickPause — останавливает автоматическую прокрутку.
slickPlay — запускает автоматическую прокрутку.
События
События позволяют реагировать на определенные действия. Например, после прокрутки к 5 слайду выведем сообщение. Для этого включаем обработчик события «afterChange».
$('#slick-slider').on('afterChange', function(event, slick, currentSlide){ if (currentSlide == 5) { console.log('Осуществлён переход к 5-му слайду'); } });
«beforeChange» срабатывает перед переходом к другому слайду:
$('#slick-slider').on('beforeChange', function(event, slick, currentSlide, nextSlide){ console.log('Собираемся осуществить переход к '+nextSlide+' слайду'); });
Вот решение https://newwebmaster.ru/2016/06/slick-in-bootstrap-tabs-and-equal-height.html
Большой слайдер с 1й картинкой вверху и ниже маленький слайдер с 5ю картинками и ниже dots с привязкой к нижнему слайдеру. При клике на нижнем слайдере на слайд, у нас на верхнем слайдере выводится эта картинка в большом разрешении, dots(кружочек ниже) становится белым, т.к. стал активным другой слайд. При листании стрелочками большого слайдера, в нижнем слайдере меняется белая окантовка(активный слайд) и dots(белый кружочек)
Заранее спасибо!
$('.your-element').slickGoTo(5);
Если его применить на кружочки сверстанные и на нижний слайдер. Только я не понял как этот скрипт применить. Подскажешь?
http://joxi.ru/DmBNMzZSNDoL8m
имеется слайдер, сделал его вертикальным через vertical:true, подскажите пожалуйста, можно ли как-то динамически изменять это значение на false?
а то в моб версии он снова горизонтальный, спасибо
Ну я понимаю что в JS все «объект», а как создать второй слайдер не пойму(
Заранее спасибо!
В скобках для каждого слайдера уже можно указывать свои индивидуальные параметры.
Как сделать прокрутку «вверх» до якоря по нажатию на элемент dots? Рисую слайдер 3х3, навигация внизу, надо чтобы когда осуществлялся переход на новый слайд, срабатывало событие ScrollToTop.
как перейти именно к якорю, не знаю. Нужно что-то придумывать.
Подскажите почему не срабатывают вкладки jsfiddle.net/xv1ogzkt при переключении? Если row 1, то норм, если больше начинает падать.
Не подскажите, можно ли сделать так, чтоб при нажатии на кнопки (стрелки) проматывался 1 слайд, а во время автопрокрутки — 2 слайда?
Но не испытывал, может где-то ошибка.
а вел себя как здесь: фото сходятся, но остаются в первоначальном размере. В конце начинают изменять ширину окна, но без искажения самих пропорций фотографий https://tezeks.com/avstriya/vena/peshehodnaya-ekskursiya-po-vene
вот пример как стрелки скрываются https://tezeks.com/chehia/praga/ekskursija-v-drezden
вот у меня не скрываются http://dialtour.ru/assets/libs/lightbox2-master/examples/slick-1.6.0/index1.html
На сайте стоит слайдер на автоплее. Где-то в середине страницы.
Если не «трогать» его, не кликать, не пролистывать мышкой, то ведет себя нормально, но если же сделать какую-либо манипуляцию с ним, пролистать, кликнуть по одному из баннеров, то становится невозможно прокручивать страницу и просматривать её иные фрагменты. Вернее, страница, содержащая слайдер, всегда возвращается к слайдеру, размещая его по середине. То есть я прокручиваю страницу вверх — она сама прокручивается на слайдер. То же самое вниз — прокрутил вниз, страница сама вернулась на слайдер.
В чем может быть проблема?
Спасибо.
accessibility: false
Спасибо!
Подскажите в чем проблема, я подключил в слайдере свойство draggable: false, т.е. отключил прокручивание картинок с помощью мышки и оставил прокрутку с помощью кнопок. На компьютере свойство работает, но на мобильном устройстве НЕТ. Как отключить прокручивание картинок пальцем, оставить только кнопки?
Спасибо.
А сделать так, чтобы только по нажатию мышки он активировался?
Подскажите а можно сделать полосу прокрутки у слик слайдера вместо навигационных точек??
Очень надо!!!
Скачал шаблон, в нем это слайдер. разобрался, что за слайдер отвечает скрипт slick.min.js. Не могу понять как сделать больше паузы между слайдами, уже меня разные значения.
https://code.jquery.com/jquery-3.1.1.min.js
Спасибо!
1) затемнить те слайды, которые неактивны
2) активный слайд большого слайдера соответствовал бы 2 или 3ему слайду маленького. (centerMode — оставляет «обрезанные» кадры по бокам, что не желательно.)
Премного благодарен за любой совет и помощь!
Или можно с прозрачностью слайдов поиграться.
А по 2му пункту ничего не могу сказать, не понял как это. Наверно, нельзя сделать.
Заменил стандартные кнопки прокрутки на свои, но они стали не по бокам слайдера а поверх него и под ним, как можно изменять расположение этих самых кнопок?
Либо, писать скрипт на js, который сам будет определять макс. высоту слайдов и устанавливать её для всех слайдов. Но скрипт я не помогу написать — лень.
adaptiveHeight: true
.slick-slide:focus {outline: none;}
Заранее спасибо
а включать так:
а в вызове слайдера добавить:
'initialSlide': rand
Рандомной выпадает каждый раз разный слайд
слайдер, например из 10 div.slider-elem, показывать на странице три из них (по дефолту все три будут иметь класс slick-active), НО что бы из показанных трех slick-active был только одни! я хочу одному из показанных слайдов сделать другие стили, но по дефолту все отображенные на странице div имеют класс slide-active
Хочу что бы была карусель из 10 элементов, показывало на странице три, и активный был только один, например активный сделать Крупным
По идее, надо предыдущему слайду какой-то класс на JS присваивать и уже к этому классу на CSS привязывать нужные стили. Класс привязать можно как-то так:
Но это всё примерно.
Вызов после выполнения аякс:
https://yadi.sk/i/pVJezWJs3ZnmX8
Ссылка на JSFiddle
сладер работает отлично во всех браузерах, кроме IE 11 — по бокам слаедера видны куски следующих картинкок слайда, у меня никак не получается их убрать
Меняете на любое подходящее значение.
Помогите решить проблему…
В настройках стоит:
Всё отлично работает! Но мне очень надо поставить centerMode: true
Как только поставлю, то все слайды «слипаются», то есть без зазора! Подскажите что поправить надо чтоб было как без centerMode: true
И ещё проблема с центрированием, почему листает только по одному слайду, ну и дотов выводить соответсвенно, хотя в настройках указанно slidesToScroll: 5 Как сделать чтоб листал по 5 слайдов?
Слипаются, видимо, из-за некорректной верстки слайдов. Нужно смотреть и править CSS стилями.
Режим centerMode, к сожалению, игнорирует параметр slidesToScroll. Исправить это никак нельзя, только писать свой обработчик событий на нажатие кнопок. Смотреть в сторону методов.
Если методы паузы и возобновления автопрокрутки не сработают, то попробуй заменить на:
События Slick slider.
У меня всего 5 слайдов. Мне нужно чтоб после каждого перелистывания слайда задавался определенный класс диву.
Код сработал, но проблема что он раз сработал и повторно не хочет. Мне нужно его зациклить. Помогите пожалуйста!
Вот код:
А вообще что-то делаете не так. Прежде чем добавить класс, нужно другие удалить, иначе это не будет нормально работать.
Или писать так:
На первом слайде нужен класс active0, на втором active1, на третьем active2 и т.д
.attr('class', 'active' + currentSlide);
'active' — это мой класс, как я понимаю. А сюда 'class' что?
Если вам не сложно, подскажите.
Мне ещё нужно чтоб при появлении первого слайда — на один div цеплялся класс и перед появлением второго слайда этот класс убирался, при появлении второго слайда — на второй div цеплялся тот же класс и убирался перед появлением третьего слайда и т.д.
Очень быстро отвечаете, спасибо огромное!
Уже замучился, не знаю как решить, может Вы что подскажете.
Если файлы css и js подключать как в статье, то всё норм. только гугл спид инсайт показывает к-во балов 30 (очень мало).
Если файлы подключать асинхронно, скриптами. То показатель почти 60, что вполне сносно. Но появляется проблема. Если мы переходим с другой страницы, на страницу с указанием id (realadmin.ru/#my-id), а id расположен далеко за слайдером, то за счёт того что css и js не успевают прогрузиться, слайдер в высоту занимает кучу места, а к моменту перехода он уже собирается, но отображаемый контент уже не тот.
Но если уж приспичило, попробуй вызов слайдера делать по событию window.onload или вообще по settimeout. Больше ничего не посоветую.
Подскажите, пожалуйста, если картинка прописана не тегом , а через фоновую картинку, , то как правильно прописать отложенную загрузку
Вариант, для фрагмента настроек в скрипте, , не срабатывает, судя по вкладке NETWORK в разработчике. Грузит сразу все три картинки.
Дата атрибут тоже не вариант, судя по всему.
Заранее спасибо за внимание.
Для ленивой загрузки фоновых изображений можно только костыльнуть и написать что-то такое:
И написать небольшой скрипт, который будет при пролистывании применять этот фон к активному слайду.
В любом случае спасибо за внимание и ответ!
Вот пример:
Во-первых, пути подключения плагина и jQuery проверяй. Надо использовать абсолютные пути, а не относительные. То есть, от корня сайта.
Во-вторых, есть вероятность что jQuery отрабатывает после вызова slick. Пробуй обернуть так:
В-третьих, смотри ошибки в браузерной консоли.
причем в отладчике заметил странную вещь классу slick-track автоматом добавляются свойства если убрать width и transform то работает как надо
Вот только на 900 не работает? Почти уверен что проблема скорее в верстке самого сайта. Например, автоширина области контента на этом разрешении или что-то вроде этого.
Это пример из официальной документации.
Можно ли как то создать интерактив в слайдах? Например, ссылку, с ховером, переходом, как обчно. Там все наслаивается друг на друга и ссылка видна, но не интерактивна
Есть такой код:
Три рамки расположены через флекс, далее поверх рамок наложены иные изображения.
Пытаюсь это все обернуть в слайдер таким образом, чтобы по свайпу листались
изображения с рамками, а внизу через точки переключались изображения с рамками
как правильно это сделать?
По мне, так рамки надо делать с помощью псевдоклассов before/after.
По делу:
Имею вот такой ресурс http://eratest.mcdir.ru/cases/novogodnee-korporativnoe-meropriyatie/ у него на детальной странице слайдер с .slider-for. И тот слайдер что .slider-for ( боковой горизонтальный ) должен всегда отображать минимум 5 превью изображений. Даже если из админки их всего 2. slidesToShow: 4 & infinite: true проблему не решают. Нужно писать свой код по типу проверки на lenght < 5 или есть что-то коробочное?
Спасибо.
П.С. Если есть возможность — благодарен буду за пример клонирования при lenght < 5. Только второй месяц на JS.
if($('.main-case_list').length < 5) {
$('.main-case_list .main-case_wrapp').clone().appendTo('.main-case_list');
} else {
console.log(' больше 5 ')
}
Но оно повторяет итерацию 1 раз. Видимо еще нужно делать проверку-итерацию i++. Чтобы условие выполнялось пока не удовлетворит.
То есть грубо говоря, есть ли возможность чтоб на главном слайдере было первое изображение, но во второстепенном его не было видно изначально и все работало как надо. для слайдера навигатора добавлена настройка centerMode
Начала переносить в проект и все слетело и со стилями, и с расположением. Уже второй день сижу и не могу даже заставить в инструментах разработчика установить как надо. Первый вопрос — это слайд первый только стоит верно, все остальные при клике уходят в минус совсем. Вижу, что при инициализации у них почему то у всех left становится -686px, а дальше у всех увеличивается в 2 раза соответственно: -1372px и -2058px.
Как заставить их появляться правильно?
И второй вопрос — второй слайдер раньше был внизу горизонтально, сейчас уехал под футер и стал вертикальным. В консоли куча классов появляется от слайдера и как я не пытаюсь — ни один не дает ничего сделать. Если бы я не написала на чистом листе и все не проверила — помогите советом!!!
Помогите разобраться, уже весь гугл затер до дыр — решения не нашел.
Есть слайдер с такими настройками:
Как видно перелистывание по одному слайду, но при перетаскивании слайдов с помощью курсора мышки происходит сдвиг на один слайд, а не на насколько сильно потянули слайд.
Подскажите сделать чтобы при перелистывании слайдов с помощью кнопок было по одну, а когда с помощью курсора мышки на столько слайдов на насколько сильно потянули слайд.
За ранее спасибо!!!
К сожалению, сам слайдер так устроен. Поэтому, только 2 варианта — искать другой jQuery плагин, который может это из коробки, ну либо как-то дорабатывать slick. Первый вариант, наверно, будет проще.
А если дорабатывать не подскажите куда копать?
Можно как-то адаптировать без фиксированного width?
Значит что-то с мобильной вёрсткой не так. Смотри на ширину контейнера на мобильном разрешении — что-то с ним не так.
Использую синхронизацию слайдеров в галерее. Отдин слайдер для отображения с оним слайдом и стрелками второй для навигации вертикальный с несколькими слайдами. Как реализовать условие чтоб кода в слайдере навигации слайдов менше чем определенное количество (требуемое чтоб заполнить панели целиком) они не прокручивались при нажалии на стрелки в первом слайдере.
У меня слайдер с такими настройками:
Ещё как вариант, на чистом js сделать подсчет слайдов и скрытие стрелок.
Нашел на просторах такой кусок кода, возможно пригодится:
Дурацкое решение, типа если какое-то условие есть, то прокручиваем обратно. Я лично не пробовал, но может и будет работать.
Можете подсказать почему не появляются стрелки в slick?
спосибо!
Вот как бы ещё вывести под картинкой её alt в качестве подписи? Есть какие-нибуль идеи или готовые решения?
У меня вариант slick'а с синхронизированным слайдером (Slider Syncing): вверху большая картинка, а под ней превьюшки, которые все разной ширины и высоты. Так вот, эти превьюшки все выравнены по вертикали по TOP, что не есть красиво.
Как выровнять их по вертикали по серединке (middle)?
В интернете решений (и идей) много, но ни одно корректно не срабатывает.
Вложенность:
Container-fluid
Row
Slider
Div — img
Div — img
Div — img
Слайдер нужен на весь экран. Адаптивный.
Спасибо ♥️
Thanks! :)
Да проблема была в том что отсутствовал col-12 т.к слайдер нужен был на всю ширину экрана.
Реализовала вот так:
Если не сработает, то надо смотреть что там с вёрсткой, а так для выравнивания по вертикали так и так использовать только flex.
Было:
Стало:
Такой длинный путь был, т.к. файлы грузились через Медиабиблиотеку Битрикса.
В чем причина так и не понял. Может у плагина есть ограничение на длину строки урла? Или дело не в плагине, а в CRM? Интересно, если в плагине ограничение, то как исправить. Через медиабиблиотеку грузить всё-таки удобнее и правильнее.
Сам по себе путь не такой уж и большой, всего 73 символа, скрипту должно быть всё равно.
Обернуть в эту конструкцию:
Собственно сам файл functions.php:
add_action( 'wp_enqueue_scripts', 'summer_palace_style' );
add_action( 'wp_enqueue_scripts', 'summer_palace_scripts' );
function summer_palace_style() {
wp_enqueue_style( 'normalize-style', get_template_directory_uri(). '/assets/css/magnific-popup.css' );
wp_enqueue_style( 'magnific-style', get_template_directory_uri(). '/assets/css/normalize.css' );
wp_enqueue_style( 'main-style', get_stylesheet_uri() );
}
function summer_palace_scripts() {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js');
wp_enqueue_script( 'jquery' );
wp_enqueue_script( 'magnific-script', get_template_directory_uri(). '/assets/js/jquery.magnific-popup.min.js', array('jquery'), null, true );
wp_enqueue_script( 'slick-script', get_template_directory_uri(). '/assets/js/slick.min.js', array('jquery'), null, true );
function summer_palace_style() {
wp_enqueue_style( 'normalize-style', get_template_directory_uri(). '/assets/css/magnific-popup.css' );
wp_enqueue_style( 'slick', get_template_directory_uri(). '/assets/css/slick.css' );
wp_enqueue_style( 'slick-theme', get_template_directory_uri(). '/assets/css/slick-theme.css' );
wp_enqueue_style( 'magnific-style', get_template_directory_uri(). '/assets/css/normalize.css' );
wp_enqueue_style( 'main-style', get_stylesheet_uri(), array('normalize-style', 'magnific-style'));
}
Но мне кажется что дело не в подключении, а в том что он конфликтует с какими-то другими скриптами. Что именно не так можно посмотреть в браузерной консоли.
Подключила slick slider, работает при любой адаптивной ширине, кроме как в ширине под ipad 768px, там он преобразовывается в сlass role
Под слайдом появляются три кнопки, слайд листается при нажатии на эти кнопки, а должен листаться при нажатии на стрелки, которые на слайде. Хотя в ширине 1024рх, с теми же настройками, все листается при нажатии на стрелки, которые на слайде. И в меньшей ширине тоже все хорошо.
Подскажите, использую следующую конструкцию:
но тогда, при наведении на картинки мыши слайдер останавливается и снова не запускается. Если же использовать fade: true, тогда почему то отображается только 1 картинка вместо 3.
Подскажите, как сделать так, что бы отображались 3 картинки и слайдер не останавливался при наведении на них мышки.
Попробуй так:
А так к сожалению слайдер уже давно не поддерживается, поэтому лучше искать другие решения.
Так выглядит HTML к элементу добавляется H3 (можно любой) с надписью, которая будет в дотсе:
— сам слайд
текст кот. будет в дотсах
— сам слайд
текст кот. будет в дотсах
— сам слайд
текст кот. будет в дотсах
— сам слайд
текст кот. будет в дотсах
Так выглядит JS:
где .volume__slick — класс слайдера
h3 — атрибут, где пишем что будет в дотсе
$('.volume__slick').on('init', function(event, slick){
var dots = $( '.slick-dots li' );
console.log( 'м' );
dots.each( function( k, v){
$(this).find( 'button' ).addClass( 'heading'+ k );
});
var items = slick.$slides;
items.each( function( k, v){
var text = $(this).find( 'h3' ).text();
$( '.heading' + k ).text(text);
});
});
$('.volume__slick').slick({
dots: true,
focusOnSelect: true,
infinite: true,
arrows: false,
speed: 300,
slidesToShow: 1,
slidesToScroll: 1,
});
В CSS обязательно прописываем следующее, для того чтобы сткрыть текст Н3 в самих слайдах:
.slick-slide{
h3{
display: none;
}
}
здравствуйте не могу разобраться почему не работает slick-slider, может сможет кто помочь? проблема конкретно в этом файле