Статьи

Анимированная фильтрация и сортировка с помощью библиотеки MixItUp 3 JS

Фильтрация и сортировка частей вашего сайта — отличный способ организовать контент. Портфолио, альбомы и блоги — это всего лишь несколько примеров того, что вы можете классифицировать. Для этого могут помочь многие библиотеки JavaScript. Двумя наиболее популярными являются библиотеки MixItUp и Isotope .

В этой статье я расскажу об основных функциях MixItUp 3 (последняя версия на момент написания) и покажу вам все шаги, необходимые для использования его в ваших проектах. Чтобы лучше продемонстрировать, как работает эта библиотека, я также создал демо-версию , на которую я буду ссылаться всюду по статье.

Примечание. Эта статья была обновлена ​​в феврале 2017 года и теперь охватывает версию 3 библиотеки MixItUp.

Что такое MixItUp 3?

Как упомянуто выше, MixItUp 3 является JavaScript-библиотекой, свободной от зависимостей, которая позволяет фильтровать и сортировать элементы с использованием CSS-анимации. Созданный Патриком Кункой , он поставляется с несколькими вариантами настройки и подробной документацией. Вы можете легко интегрировать его в существующие макеты. Все, что нужно, это нацелить нужные элементы, и библиотека сделает всю работу за вас.

Для некоммерческих проектов вы можете использовать его бесплатно. Однако коммерческие проекты требуют лицензии. Более подробная информация доступна на этой странице .

Библиотека работает во всех современных браузерах (включая IE10 + с полной функциональностью и резервным функционалом, но без анимации в IE8 +).

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

Начало работы с MixItUp 3

Чтобы начать работу с MixItUp 3, сначала необходимо включить его в свои проекты. Вы можете скачать его, посетив его страницу GitHub или используя менеджер пакетов, такой как npm .

Для нашей демонстрации мы будем использовать первый вариант. Требуемый скрипт будет помещен перед закрывающим </body> , например:

  ... <script src="/path/to/mixitup.min.js"></script> </body> 

Давайте продолжим со структурой нашего контента.

Сборка Контейнера

Сначала мы обертываем элементы, которые мы хотим отсортировать и фильтровать в контейнере. Обернутые элементы должны иметь общее имя класса. В нашем случае имя класса является mix-target . Контейнер будет использовать этот класс для определения целевых элементов. Кроме того, мы присваиваем уникальный идентификатор этому контейнеру ( mix-wrapper ). Позже мы нацеливаем его на инициализацию экземпляра MixItUp.

Вот HTML, который демонстрирует то, что я только что описал:

 <ul class="courses" id="mix-wrapper"> <li class="mix-target"> <a href="#">Economics<span>(U)</span></a> </li> <li class="mix-target"> <a href="#">Pharmacology<span>(G)</span></a> </li> <!-- more list items here --> </ul> 

На данный момент мы настроили базовую структуру наших элементов. Теперь мы готовы посмотреть, как работают фильтрация и сортировка.

фильтрация

Мы начнем с определения категорий фильтров в нашем контенте. В этом примере мы будем использовать некоторые категории, связанные с образованием: undergraduate , graduate и phd . Затем мы добавляем их как классы к целевым элементам.

Вот разметка для первых двух пунктов:

  <li class="mix-target undergraduate"> <a href="#">Economics<span>(U)</span></a> </li> <li class="mix-target graduate"> <a href="#">Pharmacology<span>(G)</span></a> </li> 

Далее мы определяем обработчики кликов, которые будут отображать элементы фильтра. Мы будем использовать элементы <button> для этого. Мы добавляем класс filter-btn и атрибут data-filter к каждому из них. Значение пользовательского атрибута должно соответствовать именам классов, которые были применены к целевым элементам. Ключевые слова all и none также являются возможными значениями.

Две наши кнопки фильтра показаны ниже:

 <button class="filter-btn" data-filter=".undergraduate">Undergraduate</button> <button class="filter-btn" data-filter=".graduate">Graduate</button> 

По умолчанию при первой загрузке MixItUp отображаются все целевые элементы. Это означает, что <button> с пользовательским атрибутом data-filter="all" сработала. Кроме того, библиотека применяет к этой кнопке класс programs-filter-btn-active . Это позволяет нам стилизовать выбранную опцию фильтрации / сортировки, чтобы указать, что она была выбрана.

Вот как мы будем стилизовать его в нашей демонстрации:

 .programs button.programs-filter-btn-active, .programs button.programs-sort-btn-active { box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.5) inset, 0px 0px 1px transparent; background: #3a9fbf; color: white; } 

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

Давайте теперь продолжим сортировку.

Сортировка

Первое, что нам нужно сделать, — это определить атрибуты, по которым мы хотим отсортировать. В нашем проекте это атрибуты order и year . В качестве следующего шага мы используем их имена для применения пользовательских атрибутов ( data-order и data-year ) к целевым элементам. Значения этих пользовательских атрибутов зависят от порядка сортировки, который мы хотим достичь.

HTML для двух элементов будет выглядеть так:

 <li class="mix-target undergraduate" data-order="5" data-year="4"> <a href="#">Economics<span>(U)</span></a> </li> <li class="mix-target graduate" data-order="14" data-year="2"> <a href="#">Pharmacology<span>(G)</span></a> </li> 

На этом этапе мы определяем элементы <button> как обработчики sort-btn и sort-btn класс sort-btn и атрибут data-sort к каждому из них. Значение этого атрибута должно использовать следующее соглашение:

 <button data-sort="order:asc"> 

Таким образом, у нас есть атрибут для сортировки, тогда в качестве значения у нас есть тип заказа, за которым следует двоеточие вместе с индикатором «asc» или «desc».

Этот атрибут также принимает в качестве значений default и random ключевые слова. Еще одна интересная вещь: мы можем сортировать, используя несколько атрибутов одновременно.

Две кнопки сортировки, которые используются в нашем примере, показаны ниже:

 <button class="sort-btn" data-sort="order:asc">Ascending</button> <button class="sort-btn" data-sort="year:desc order:desc">Descending <span class="multi">(Multi)</span></button> 

При первой загрузке MixItUp срабатывает кнопка с атрибутом data-sort="default:asc" . Тем не менее, элементы сортируются в зависимости от их внешнего вида DOM. Как и кнопка фильтра по умолчанию, эта кнопка получает активный класс ( programs-sort-btn-active ).

Теперь, когда мы рассмотрели основные функции библиотеки, пришло время посмотреть, как мы можем ее инициализировать.

Параметры настройки

Чтобы включить функциональность MixItUp 3 в нашей демонстрации, мы используем фабричную функцию mixitup и передаем ей два параметра:

  1. Селектор, который представляет наш контейнер
  2. и объект конфигурации, который переопределяет поведение по умолчанию MixItUp.

Вот код:

 mixitup('#mix-wrapper', { load: { sort: 'order:asc' /* default:asc */ }, animation: { effects: 'fade rotateZ(-180deg)', /* fade scale */ duration: 700 /* 600 */ }, classNames: { block: 'programs', /* mixitup */ elementFilter: 'filter-btn', /* control */ elementSort: 'sort-btn' /* control */ }, selectors: { target: '.mix-target' /* .mix */ } }); 

Давайте подробнее рассмотрим наши настройки:

  1. Во-первых, когда библиотека загружается, мы меняем active кнопку сортировки по умолчанию.
  2. Далее мы идентифицируем различные анимационные эффекты для целевых элементов.
  3. Наконец, мы добавляем пользовательские классы к целевым элементам, фильтруем и сортируем кнопки. Так, например, когда элемент управления фильтра становится активным, к нему добавляется класс programs-filter-btn-active вместо общего класса по умолчанию mixitup-control-active .

Примечание. Исходные значения по умолчанию указаны в комментариях.

Стоит отметить, что mixitup фабрики mixitup возвращает экземпляр MixItUp, которым мы можем манипулировать, используя его методы API .

Вы можете посмотреть этот пример кода в действии в полной демонстрации , которую вы можете попробовать ниже:

Вывод

В этой статье рассматриваются только основы использования библиотеки MixItUp 3. Мы могли бы обсудить гораздо больше, в том числе расширения MixItUp Pagination и MixItUp MultiFilter . Я надеюсь, что, по крайней мере, демонстрация дала вам представление о том, как вы могли бы использовать его в будущем проекте.