Библиотека Isotope предоставляет мощный механизм для
организации и фильтрации элементов на веб-странице. Основной объект
создаётся с помощью конструктора Isotope, которому
передаётся контейнер элементов и объект с опциями:
var iso = new Isotope( '.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
percentPosition: true
});
itemSelector — CSS-селектор
элементов внутри контейнера, которые будут управляться Isotope.
layoutMode — режим компоновки.
Основные варианты:
masonry — кирпичная сетка, элементы упорядочиваются с
учётом их высоты;fitRows — элементы располагаются в строгие ряды;vertical — вертикальная компоновка, элементы
выстраиваются сверху вниз.percentPosition — при
true размеры и позиции элементов задаются в процентах, что
улучшает адаптивность.
После инициализации доступен ряд основных методов, используемых для управления сеткой:
iso.arrange(options) — перестроение элементов по новым
правилам. Можно задавать фильтры (filter) и сортировку
(sortBy).iso.reloadItems() — обновляет внутренний массив
элементов после добавления новых DOM-элементов.iso.getItemElements() — возвращает массив текущих
DOM-элементов в контейнере.iso.layout() — принудительно выполняет компоновку
элементов.Фильтрация позволяет динамически отображать только определённые
элементы. Используется метод arrange с параметром
filter:
iso.arrange({ filter: '.active' });
true или
false для каждого элемента:iso.arrange({
filter: function(itemElem) {
return itemElem.dataset.category === 'js';
}
});
В этом примере будут показаны только элементы с
data-category="js".
Сортировка выполняется с помощью параметра sortBy и
опционального sortAscending:
iso.arrange({
sortBy: 'name',
sortAscending: true
});
sortBy — ключ сортировки, может быть
именем свойства из данных элементов;sortAscending — порядок сортировки:
true для возрастания, false для убывания.Для пользовательских критериев сортировки можно использовать объект
getSortData:
var iso = new Isotope('.grid', {
getSortData: {
name: '.name',
weight: function(itemElem) {
return parseFloat(itemElem.querySelector('.weight').textContent);
}
}
});
Isotope поддерживает добавление новых элементов в реальном времени с последующей компоновкой:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
newItem.textContent = 'Новый элемент';
iso.appended(newItem);
iso.layout();
Для удаления элементов используется метод remove:
var itemsToRemove = iso.getItemElements().filter(item => item.classList.contains('obsolete'));
iso.remove(itemsToRemove);
iso.layout();
Isotope включает несколько утилит для работы с DOM и вычислений, которые упрощают интеграцию и настройку:
getItemElements() — возвращает текущие
элементы сетки;stamp(element) — помечает элемент как
“фиксированный”, вокруг которого будет выстраиваться сетка, без
изменения позиции;unstamp(element) — убирает
фиксацию;destroy() — полностью удаляет Isotope
с элемента, восстанавливая исходный DOM;on(eventName, listener) и
off(eventName, listener) — привязка и
удаление событий, таких как arrangeComplete или
layoutComplete.Пример использования событий:
iso.on('arrangeComplete', function(filteredItems) {
console.log('Фильтрация завершена, количество элементов:', filteredItems.length);
});
Для точного позиционирования и адаптивной компоновки важны следующие параметры:
percentPosition: true — размеры и
позиции элементов вычисляются в процентах;masonry options — можно задавать
columnWidth, чтобы задать ширину колонки;fitRows options — управляет отступами
через gutter.Пример:
var iso = new Isotope('.grid', {
layoutMode: 'masonry',
masonry: {
columnWidth: '.grid-sizer',
gutter: 10
}
});
.grid-sizer используется как шаблон ширины колонки, что
облегчает создание адаптивных сеток.
filter и sortBy в
методе arrange.layoutComplete, arrangeComplete,
removeComplete, appendComplete позволяют
внедрять собственную логику после операций.imagesLoaded предотвращает некорректную
компоновку при асинхронной загрузке изображений:imagesLoaded('.grid', function() {
iso.layout();
});
reloadItems()
и layout() для пересчёта позиций.Эта глава охватывает основные утилиты и вспомогательные функции Isotope, позволяя создавать гибкие и интерактивные сетки с фильтрацией, сортировкой и динамическим обновлением элементов.