Библиотека Isotope предоставляет мощные инструменты для динамического управления расположением элементов на странице. Одним из ключевых аспектов является сортировка элементов при инициализации, которая позволяет задать порядок отображения без дополнительного вмешательства после загрузки контента.
При создании нового экземпляра Isotope можно передать объект с
настройками. Для сортировки используется свойство sortBy,
которое указывает по какому критерию необходимо упорядочить
элементы:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
sortBy: 'name'
});
Здесь:
itemSelector — CSS-селектор элементов, которые будут
управляться Isotope.layoutMode — режим расположения элементов (например,
fitRows, masonry).sortBy — ключ, по которому будет происходить первичная
сортировка.Можно задавать сортировку не только по заранее определённым полям, но и по пользовательским атрибутам элемента.
getSortDataДля более гибкой сортировки применяется объект
getSortData. Он позволяет определить функции или методы,
возвращающие значения, по которым будет производиться сравнение
элементов:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
getSortData: {
name: '.name', // сортировка по тексту внутри элемента с классом .name
price: function(itemElem) {
var price = itemElem.querySelector('.price').textContent;
return parseFloat(price.replace('$', ''));
}
},
sortBy: 'price'
});
Особенности:
'.name') —
автоматически извлекает текстовое значение указанного дочернего
элемента.Isotope поддерживает сортировку в возрастающем и
убывающем порядке через свойство
sortAscending.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
getSortData: {
name: '.name',
date: '[data-date]'
},
sortBy: 'date',
sortAscending: false
});
В примере элементы будут отсортированы по атрибуту
data-date в порядке от самых новых к самым старым.
sortAscending может быть задан как:
sortAscending: {
name: true,
date: false
}
Isotope позволяет одновременно использовать несколько критериев
сортировки, указав массив ключей в sortBy:
sortBy: ['category', 'price']
Сначала элементы сортируются по category, а внутри
каждой категории — по price. Если для ключей настроено
направление через sortAscending, оно учитывается для
каждого критерия отдельно.
Часто удобно использовать HTML-атрибуты для хранения данных, по которым производится сортировка:
<div class="grid-item" data-price="29.99" data-rating="4.5">
...
</div>
getSortData: {
price: '[data-price] parseFloat',
rating: '[data-rating] parseFloat'
}
Isotope автоматически извлекает значение атрибута и применяет
указанную функцию преобразования (parseFloat,
parseInt и т.д.).
getSortData при
большом количестве элементов, поскольку это может заметно замедлить
рендеринг.С помощью правильной настройки sortBy,
getSortData и sortAscending можно полностью
контролировать порядок отображения элементов при инициализации Isotope,
создавая структурированный и удобный интерфейс.