Как удалить несколько последних слайдов в слайдере Slick

04.02.2021

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

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

Рабочий пример удаления последних слайдов:

See the Pen Remove last slides from Slick carousel for desktop version by Denis (@deniscreative) on CodePen.dark

Удаление слайдов выполняется один раз при загрузке скрипта, то есть при изменении ширины экрана без перезагрузки страницы никакие действия со слайдером не производятся. Чтобы проверить Как работает скрипт в окне Codepen включите вкладку JS, SCSS или HTML и нажмите кнопку Rerun, чтобы скрипт загрузился еще раз для новой ширины экрана.

Ожидаемый результат:

  • на широком экране выводится 5 слайдов, слайды для моб версии удалены;
  • на малом экране выводятся все слайды (8 шт.), ничего не удалено.

Код нашего скрипта:

$(".carousel").slick({
  dots: true,
  infinite: false // IMPORTANT
});

if (window.matchMedia("(min-width: 769px)").matches) {
  var $slideSmCount = $(".item_sm").length;

  for (var i = 0; i < $slideSmCount; i++) {
    $(".carousel").slick("slickRemove", false);
  }
}

Разберем код для удаления слайдов из слайдера Slick

Для слайдов, которые нужно скрыть на десктопе задаем класс .item_sm.

infinite: false — обязательная опция, отключаем зацикленность слайдера, иначе скрипт не сможет найти последний слайд, с которого нужно начать отсчет для удаления.

Проверяем ширину экрана, и выполняем необходимый код, если ширина экрана меньше заданной:

if (window.matchMedia("(min-width: 769px)").matches) { }

Вычисляем, сколько всего элементов помечены мобильным классом .item_sm:

var $slideSmCount = $(".item_sm").length;

Запускаем цикл, который удаляет последний слайд, пока не удалит количество слайдов равное количеству мобильных слайдов $slideSmCount:

for (var i = 0; i < $slideSmCount; i++) {
  $(".carousel").slick("slickRemove", false);
}

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

Небольшое дополнение:

Можно получить индекс любого слайда и задать его для удаления, например, таким образом получим номер последнего слайда:

function getLastSlide() {
  return $(".carousel").slick("getSlick").slideCount - 1;
}

и затем удаляем указанный по счету слайд:

$(".carousel").slick("slickRemove", getLastSlide());

Пример получился интересный.=) Но по итогу, на проекте я использовал просто 2 разных слайдера: для моб версии и для десктопа, потому что дизайн у них сильно отличался и было бы сложно поддерживать в дальнейшем форматирование разных по коду и дизайну слайдов в одном слайдере. И такое бывает.

Рекомендую к прочтению:

Оставить комментарий