Метод addItems является частью API библиотеки Packery и
используется для динамического добавления новых элементов в уже
существующую сетку. Он позволяет не пересоздавать всю структуру и
добавлять элементы на лету, сохраняя текущие позиции и анимации. Это
особенно полезно при реализации бесконечной подгрузки контента или
динамических интерфейсов, где элементы появляются после загрузки данных
с сервера.
packeryInstance.addItems( elems )
Параметры:
elems – DOM-элемент, NodeList или массив элементов,
которые необходимо добавить в сетку. Метод корректно обрабатывает как
одиночные элементы, так и коллекции.Возвращаемое значение: Возвращает массив добавленных элементов, что позволяет сразу использовать их для дальнейшей работы, например, для привязки событий или анимации.
var container = document.querySelector('.grid');
var pckry = new Packery(container, {
itemSelector: '.grid-item',
gutter: 10
});
// Создание новых элементов
var newItems = [];
for (var i = 0; i < 3; i++) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = 'Новый элемент ' + (i + 1);
container.appendChild(item);
newItems.push(item);
}
// Добавление новых элементов в Packery
pckry.addItems(newItems);
// Перестройка сетки с учетом новых элементов
pckry.layout();
В этом примере метод addItems добавляет три новых блока
в существующую сетку, после чего вызывается layout() для
перерасчета позиций всех элементов.
Не вызывает автоматическую перестройку сетки.
После addItems необходимо явно вызвать
layout() или appended() для корректного
размещения новых элементов.
Совместимость с методами анимации. Добавленные элементы можно сразу анимировать с помощью CSS-трансформаций, так как Packery корректно учитывает размеры и позиции новых блоков.
Массовое добавление элементов. Метод эффективно работает с NodeList и массивами, позволяя добавлять десятки и сотни элементов без заметного падения производительности.
Поддержка динамического контента. Подходит для ситуаций, когда элементы создаются после асинхронного запроса (AJAX, fetch) или генерируются скриптом.
appendedПосле addItems часто используется метод
appended:
var addedElems = pckry.addItems(newItems);
pckry.appended(addedElems);
Разница между layout() и
appended():
layout() – перестраивает всю сетку заново.appended() – добавляет новые элементы с анимацией,
оставляя существующие позиции неизменными. Это более эффективный способ
для динамически подгружаемых элементов.addItems один раз, затем layout() или
appended().DocumentFragment,
затем добавить в DOM и передать в addItems. Это снижает
количество операций с DOM и ускоряет рендеринг.forEach или методы
привязки событий, используя возвращаемый массив.fetch('/api/get-items')
.then(response => response.json())
.then(data => {
var newItems = data.map(itemData => {
var elem = document.createElement('div');
elem.className = 'grid-item';
elem.textContent = itemData.title;
return elem;
});
newItems.forEach(item => container.appendChild(item));
var added = pckry.addItems(newItems);
pckry.appended(added);
});
В этом случае элементы загружаются асинхронно, добавляются в DOM,
затем через addItems и appended интегрируются
в сетку с сохранением плавной анимации.
addItems добавляет элементы в сетку без полной
перестройки.layout() или
appended() для корректного отображения.Метод addItems является фундаментальной частью
динамической работы с Packery и позволяет создавать гибкие и отзывчивые
интерфейсы с минимальной нагрузкой на DOM и производительность.