Для работы с библиотекой Isotope необходимо создать контейнер и элементы сетки. Контейнер может быть любым блоком HTML, например:
<div class="grid">
<div class="grid-item">Элемент 1</div>
<div class="grid-item">Элемент 2</div>
<div class="grid-item">Элемент 3</div>
</div>
Инициализация происходит через Jav * aScript:
var grid = document.querySelector('.grid');
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 – ширина одной колонки, может быть
фиксированная или зависеть от элемента .grid-sizer.Для добавления элементов в конец сетки сначала нужно их создать. Элементы можно формировать динамически через Jav * aScript:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
newItem.textContent = 'Новый элемент';
Если требуется добавить несколько элементов, удобно использовать массив:
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);
}
Чтобы добавить элементы в конец сетки и сохранить корректное
поведение Isotope, необходимо использовать метод
append:
// Добавление одного элемента
iso.appended(newItem);
grid.appendChild(newItem);
// Добавление массива элементов
items.forEach(function(item) {
grid.appendChild(item);
});
iso.appended(items);
Важные моменты:
appendChild добавляет элементы в DOM, но
не обновляет Isotope.iso.appended() уведомляет Isotope о новых
элементах, чтобы они были интегрированы в раскладку.Иногда после добавления элементов требуется пересчитать позицию всех элементов:
iso.layout();
Это особенно актуально при асинхронной загрузке изображений или
динамическом изменении размеров элементов. Для изображений лучше
использовать событие imagesLoaded:
imagesLoaded(grid, function() {
iso.layout();
});
Если в сетке настроены фильтры или сортировка, новые элементы
автоматически подчиняются этим правилам после добавления и вызова
layout. Например:
iso.arrange({
filter: '.active',
sortBy: 'name'
});
Таким образом, новые элементы будут учтены при текущих фильтрах и порядке сортировки.
Isotope поддерживает плавную анимацию при появлении элементов. Для этого необходимо убедиться, что подключены стили:
.grid-item {
transition: transform 0.4s, opacity 0.4s;
}
После вызова iso.appended() элементы плавно появятся на
своих позициях, интегрируясь в существующую сетку.
iso.appended() после вставки в
DOM.imagesLoaded или слушать событие load.append с
фильтрами и сортировкой для упорядоченного добавления.var grid = document.querySelector('.grid');
var iso = new Isotope(grid, {
itemSelector: '.grid-item',
layoutMode: 'masonry',
percentPosition: true
});
var newItems = [];
for (var i = 0; i < 3; i++) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = 'Новый ' + (i + 1);
grid.appendChild(item);
newItems.push(item);
}
iso.appended(newItems);
imagesLoaded(grid, function() {
iso.layout();
});
Этот подход гарантирует, что все новые элементы будут корректно вставлены в конец сетки, а визуальная структура останется стабильной и анимированной.