Skip to content

Instantly share code, notes, and snippets.

@isBatak
Last active October 19, 2015 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save isBatak/0a7ef7c224b7743f0c40 to your computer and use it in GitHub Desktop.
Save isBatak/0a7ef7c224b7743f0c40 to your computer and use it in GitHub Desktop.
Fixing filter bug in slick.js when using center mode.
$(document).ready(function() {
// Product slider
var $sliderFilters = $('.js-products-slider-filter > li');
var $productsSliderNavigation = $('.js-products-slider-nav');
var $productsSliderPreview = $('.js-products-slider-preview');
initSliders();
function initSliders() {
$sliderFilters.on('click', onFilterClicked);
$productsSliderNavigation.slick({
slidesToShow: 3,
slidesToScroll: 1,
asNavFor: $productsSliderPreview,
dots: false,
centerMode: true,
focusOnSelect: true
});
$productsSliderPreview.slick({
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
asNavFor: $productsSliderNavigation
});
var initialFilterTerm = findFilterTerm($sliderFilters.filter('.active'));
filterSlider(initialFilterTerm);
}
function onFilterClicked(event) {
event.preventDefault();
var $productSliderFilterListItem = $(this);
if( $productSliderFilterListItem.hasClass('active') === false ) {
var filterTerm = findFilterTerm($productSliderFilterListItem);
filterSlider(filterTerm);
$sliderFilters.removeClass('active');
$productSliderFilterListItem.addClass('active');
}
}
function filterSlider(filterTerm) {
var slideIndex = 0;
$productsSliderNavigation.slick('slickUnfilter');
$productsSliderNavigation.slick('slickGoTo', 0);
$productsSliderNavigation.slick('slickFilter', function (index, element) {
var $element = $(element);
var result = false;
if ($element.data('brand') == filterTerm) {
$element.attr('data-slick-index', slideIndex);
slideIndex++;
result = true;
}
return result;
});
$productsSliderPreview.slick('slickUnfilter');
$productsSliderPreview.slick('slickGoTo', 0);
$productsSliderPreview.slick('slickFilter', '[data-brand="' + filterTerm + '"]');
}
function findFilterTerm(element) {
return element.children('a').data('brand');
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment