Как реализовать фильтрацию по классам и load more в одном блоке?

Все привет!
Прошу помощи, так как уже окончательно запутался.

не могу понять как правильно адаптировать скрипт для подгрузки постов по нажатию на "смотреть еще"... он конфликтует с фильтром карточек. Добавляется класс в одном случае (hide, прописывал в css ), а в случае с подгрузкой постов, добавляется прям инлайново display: none. и поэтому фильтр не работает корректно для всех постов

есть такой каталог с карточками (тут работает подгрузка постов, но ломается фильтр)
https://runar.pw/tests/catalog/

должна работать и фильтрация и показать еще контент при нажатии на "смотреть еще".

Когда втыкаю скрипт для "смотреть еще" он у меня начинает конфликтовать с фильтром.

Вот тут работает только фильтр
https://runar.pw/tests2/catalog/

js:

// Начало скрипта для фильтра карточек

// Проверка на наличие класса hide 
var checkClass = function () {
  if ($('.section-5__card').hasClass('hide')) {
    $('.section-5__card').removeClass('hide');
  }
};


// Фильтр категорий
$(document).ready(function () {
  $('.filter-nav__reset').click(function () {
    checkClass();
  });
  $('.slick-slide.filt-her').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-her)').toggleClass('hide');
  });
  $('.filt-sedan').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-sedan)').toggleClass('hide');
  });
  $('.filt-small-crossover').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-small-crossover)').toggleClass('hide');
  });
  $('.filt-hetchback').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-hetchback)').toggleClass('hide');
  });
  $('.filt-coupe').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-coupe)').toggleClass('hide');
  });
  $('.filt-hybrid').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-hybrid)').toggleClass('hide');
  });
  $('.filt-full-crossover').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-full-crossover)').toggleClass('hide');
  });
  $('.filt-recommend').click(function () {
    checkClass();
    $('.section-5__card:not(.filt-recommend)').toggleClass('hide');
  });


  // Активное состояние кнопки
  $('.filter-nav__button').click(function () {
    $('.filter-nav__button').removeClass('filtBtn-active');
    $(this).addClass('filtBtn-active');
  })
  $('.filter-nav__reset').click(function () {
    $('.filter-nav__button').removeClass('filtBtn-active');
    $(this).addClass('filtBtn-active');
  })
  // Конец скрипта для фильтра карточек
});

// Показать еще контент
$(document).ready(function () {

  let list = $(".cards-wrap .section-5__card");
  let numToShow = 6;
  let button = $("#loadMore2");
  let numInList = list.length;
  list.hide();
  if (numInList > numToShow) {
    button.show();
  }
  list.slice(0, numToShow).show();

  button.click(function () {
    let showing = list.filter(':visible').length;
    list.slice(showing - 1, showing + numToShow).fadeIn();
    let nowShowing = list.filter(':visible').length;
    if (nowShowing >= numInList) {
      button.hide();
    }
  });
});
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
ReaverJS
@ReaverJS
1)
let showing = list.filter(':visible').length;
list.slice(showing - 1, showing + numToShow).fadeIn();

Во первых - почему showing-1? А если showing = 0? Да и так как вы задали list вне обработчика - он статический.
Можно смотреть - у каких элементов отсутствует класс hide и уже в нем отображать элементы с show()


Но лучше конечно нормально переписать, чтобы значение фильтра сохранялось в кнопке. Еще там баг - при повторном применении фильтра - автоматом срабатывает Show More.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы