Для отображения всех элементов с использованием библиотеки Isotope требуется правильно подготовить HTML-разметку и подключить саму библиотеку. Стандартная структура включает контейнер для элементов и сами элементы с присвоенными классами. Пример:
<div class="grid">
<div class="grid-item category-a">Элемент 1</div>
<div class="grid-item category-b">Элемент 2</div>
<div class="grid-item category-a">Элемент 3</div>
<div class="grid-item category-c">Элемент 4</div>
</div>
Подключение библиотеки:
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
Инициализация Isotope выполняется через JavaScript, где указывается контейнер и базовые параметры:
var grid = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
Ключевой момент: itemSelector
определяет, какие элементы будут управляться библиотекой, а
layoutMode выбирает способ расположения элементов.
Isotope использует фильтры для управления видимостью элементов. Чтобы
показать все элементы, необходимо установить фильтр в значение
'*'. Пример:
grid.arrange({ filter: '*' });
Здесь:
arrange() — основной метод для изменения отображения
элементов.{ filter: '*' } — специальная запись, означающая выбор
всех элементов, соответствующих селектору
itemSelector.При необходимости можно комбинировать фильтры и анимацию:
grid.arrange({
filter: '*',
transitionDuration: '0.6s'
});
Обратите внимание, что
transitionDuration задает длительность анимации появления
элементов, что обеспечивает плавное отображение всей сетки.
В случае, если ранее применялся фильтр (например, показывались только
элементы категории category-a), можно динамически вернуть
все элементы:
document.querySelector('#show-all').addEventListener('click', function() {
grid.arrange({ filter: '*' });
});
Такой подход позволяет создавать интерактивные кнопки управления содержимым сетки без необходимости повторной инициализации Isotope.
Часто требуется реализовать переключение между категориями и полное
отображение всех элементов. Для этого удобно использовать массив
категорий и метод arrange():
var filters = {
all: '*',
categoryA: '.category-a',
categoryB: '.category-b'
};
document.querySelector('#filter-all').addEventListener('click', function() {
grid.arrange({ filter: filters.all });
});
document.querySelector('#filter-a').addEventListener('click', function() {
grid.arrange({ filter: filters.categoryA });
});
Важно: при каждом вызове arrange()
Isotope автоматически пересчитывает положение элементов и применяет
плавную анимацию, что обеспечивает корректное отображение сетки даже при
изменении фильтров.
Если элементы ранее были скрыты через CSS или динамически добавлены в
DOM, перед вызовом arrange({ filter: '*' }) нужно
убедиться, что все элементы имеют корректные классы и не заблокированы
стилями display: none;. Например:
document.querySelectorAll('.grid-item').forEach(function(item) {
item.style.display = '';
});
grid.arrange({ filter: '*' });
Это гарантирует, что Isotope видит все элементы и правильно применяет анимацию их отображения.
Для визуального эффекта появления всех элементов можно использовать CSS-переходы и классы, например:
.grid-item {
opacity: 0;
transform: scale(0.95);
transition: opacity 0.6s, transform 0.6s;
}
.grid-item.isotope-shown {
opacity: 1;
transform: scale(1);
}
В JavaScript можно добавлять класс isotope-shown при
фильтрации всех элементов:
grid.on('arrangeComplete', function() {
document.querySelectorAll('.grid-item').forEach(function(item) {
item.classList.add('isotope-shown');
});
});
Такой подход позволяет комбинировать работу Isotope с кастомными анимациями и улучшает визуальное восприятие сетки.
layoutMode: 'masonry' или fitRows в
зависимости от дизайна.append и сразу вызывать
arrange({ filter: '*' }) для корректного отображения всех
новых элементов.Если требуется, можно комбинировать показ всех элементов с другими эффектами, например сортировкой по дате или алфавиту, что полностью раскрывает потенциал Isotope для управления динамическими сетками.