Isotope — это библиотека JavaScript, предназначенная для
динамического управления сетками элементов на странице с поддержкой
фильтрации, сортировки и анимации. Она строится вокруг концепции
контейнера (container) и
элементов (item), которые размещаются в
этом контейнере по выбранной схеме: masonry,
fitRows или vertical. Контейнер и
элементы — ключевые сущности, которые используются во всех методах и
настройках Isotope.
Контейнер — это HTML-элемент, содержащий сетку элементов, например:
<div id="grid">
<div class="grid-item">Элемент 1</div>
<div class="grid-item">Элемент 2</div>
<div class="grid-item">Элемент 3</div>
</div>
Элементы сетки — это отдельные блоки внутри контейнера, которые будут фильтроваться, сортироваться и анимироваться.
Инициализация Isotope производится через создание нового экземпляра
класса Isotope, передавая контейнер и объект опций:
var iso = new Isotope('#grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
percentPosition: true,
masonry: {
columnWidth: '.grid-sizer'
}
});
Ключевые параметры:
itemSelector — CSS-селектор для элементов сетки.layoutMode — режим расположения элементов
(masonry, fitRows,
vertical).percentPosition — определяет использование процентов
при расчете позиции элементов.masonry.columnWidth — ширина колонки для masonry-сетки;
может быть фиксированным значением или селектором.Grid Sizer — скрытый элемент внутри контейнера, задающий базовую ширину колонки:
<div class="grid-sizer"></div>
Использование grid-sizer позволяет сетке динамически подстраивать ширину элементов при изменении размера окна.
Isotope предоставляет обширный набор методов для фильтрации, сортировки и управления элементами.
Фильтрация позволяет отображать только определённые элементы на основе CSS-селектора или функции:
iso.arrange({ filter: '.category1' });
Можно использовать функцию для более сложной логики фильтрации:
iso.arrange({
filter: function(itemElem) {
return itemElem.textContent.includes('JavaScript');
}
});
Сортировка управляется через ключи данных элементов
(data-*) или функции:
iso.arrange({
sortBy: 'name',
getSortData: {
name: '[data-name]',
date: '[data-date] parseInt'
}
});
Параметры сортировки:
sortBy — ключ сортировки.getSortData — объект с функциями или селекторами,
определяющими значение для сортировки каждого элемента.Элементы можно динамически добавлять и удалять, при этом Isotope автоматически перестраивает сетку:
var newItems = document.createElement('div');
newItems.className = 'grid-item';
newItems.textContent = 'Новый элемент';
iso.appended(newItems);
Удаление элементов:
var itemsToRemove = document.querySelectorAll('.grid-item.remove');
iso.remove(itemsToRemove);
iso.layout(); // Перестроение сетки после удаления
Если размеры элементов изменились, необходимо вызвать метод
layout:
iso.layout();
Для обновления коллекции элементов:
iso.reloadItems();
iso.layout();
Isotope имеет несколько групп опций:
masonry, fitRows,
vertical).'0.4s'.Пример использования анимации с задержкой:
var iso = new Isotope('#grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
transitionDuration: '0.6s',
stagger: 30
});
Isotope поддерживает несколько событий, к которым можно привязать обработчики:
arrangeComplete — вызывается после завершения
фильтрации или сортировки.layoutComplete — вызывается после завершения
перестроения сетки.removeComplete — вызывается после удаления
элементов.Пример привязки события:
iso.on('arrangeComplete', function(filteredItems) {
console.log('Фильтрация завершена. Отображено элементов:', filteredItems.length);
});
Isotope позволяет работать с коллекциями элементов, которые
появляются или изменяются динамически. Для этого используются методы
appended, prepended и remove.
Пример динамического добавления нескольких элементов:
var items = [];
for (var i = 0; i < 5; i++) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = 'Элемент ' + (i + 1);
items.push(item);
}
iso.appended(items);
После добавления сетка автоматически перестроится и применит текущие фильтры и сортировку.
Документация должна быть структурирована по принципу “сущность → методы → примеры”, включая:
Такой подход обеспечивает максимальную наглядность и доступность информации при изучении и использовании Isotope в реальных проектах.