Isotope — это мощная библиотека для динамического управления сетками элементов в веб-интерфейсах. Одной из ключевых возможностей является множественная сортировка, которая позволяет упорядочивать элементы по нескольким критериям одновременно, обеспечивая гибкость и точность отображения данных.
Множественная сортировка в Isotope работает на основе массива критериев, где каждый критерий задаётся функцией или ключом данных элемента. Isotope применяет сортировку последовательно: сначала по первому критерию, затем по второму и так далее.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
getSortData: {
name: '.name', // текстовое значение
price: '.price parseFloat', // числовое значение
rating: '[data-rating] parseInt' // значение из атрибута
}
});
iso.arrange({
sortBy: ['rating', 'price', 'name'],
sortAscending: {
rating: false, // по убыванию
price: true, // по возрастанию
name: true // по алфавиту
}
});
В примере выше элементы сначала сортируются по рейтингу
(rating) в порядке убывания, затем по цене
(price) по возрастанию, и только после этого — по имени
(name) в алфавитном порядке.
Для более сложных случаев можно использовать кастомные функции сортировки, которые возвращают значение, по которому будет производиться сравнение.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
getSortData: {
nameLength: function(itemElem) {
return itemElem.querySelector('.name').textContent.length;
},
priceRatingRatio: function(itemElem) {
var price = parseFloat(itemElem.querySelector('.price').textContent);
var rating = parseInt(itemElem.getAttribute('data-rating'));
return price / rating;
}
}
});
iso.arrange({
sortBy: ['priceRatingRatio', 'nameLength'],
sortAscending: {
priceRatingRatio: true,
nameLength: true
}
});
Здесь элементы сортируются сначала по соотношению цены и рейтинга, а затем по длине имени. Это открывает возможность применять произвольные алгоритмы для сложной логики отображения.
Isotope позволяет менять порядок сортировки на лету,
сохраняя текущую конфигурацию сетки. Для этого используется метод
arrange() с новым массивом sortBy и
соответствующим объектом sortAscending.
document.querySelector('#sort-button').addEventListener('click', function() {
iso.arrange({
sortBy: ['name', 'price'],
sortAscending: {
name: true,
price: false
}
});
});
После вызова метода элементы плавно переставляются на основе новых критериев сортировки, без перезагрузки страницы.
Isotope поддерживает одновременную фильтрацию и множественную сортировку, что позволяет отображать только нужные элементы и при этом упорядочивать их по нескольким параметрам.
iso.arrange({
filter: '.in-stock',
sortBy: ['rating', 'price'],
sortAscending: {
rating: false,
price: true
}
});
В этом примере сначала выбираются только элементы с классом
.in-stock, а затем они сортируются по рейтингу и цене.
getSortData, если элемент не изменяется, чтобы избежать
повторных вычислений при повторных перестановках.sortBy критичен: первый
критерий имеет наивысший приоритет.sortAscending можно задавать как булевое
значение для всех критериев одновременно, или как объект с
индивидуальными настройками для каждого критерия.Множественная сортировка в Isotope открывает возможность создания сложных, динамических интерфейсов, где элементы адаптивно упорядочиваются по нескольким характеристикам одновременно, обеспечивая точный контроль над отображением данных.