Метод reloadItems является важной частью функционала
библиотеки Packery и отвечает за обновление внутреннего списка элементов
сетки после динамических изменений DOM. В отличие от автоматического
построения сетки при инициализации, reloadItems позволяет
повторно просканировать контейнер на предмет новых, удалённых или
изменённых элементов и корректно синхронизировать их с текущим
состоянием сетки.
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10
});
pckry.reloadItems();
После вызова reloadItems необходимо вызвать метод
layout() для перерасчёта положения элементов в сетке:
pckry.reloadItems();
pckry.layout();
Метод актуален в случаях, когда DOM внутри контейнера изменяется динамически:
var grid = document.querySelector('.grid');
var item = document.createElement('div');
item.className = 'grid-item';
grid.appendChild(item);
pckry.reloadItems();
pckry.layout();
var itemToRemove = document.querySelector('.grid-item:last-child');
grid.removeChild(itemToRemove);
pckry.reloadItems();
pckry.layout();
reloadItems не пересчитывает позиции элементов
автоматически, поэтому всегда следует вызывать
layout() после обновления элементов._getItems), что может быть ресурсоёмко при больших сетках,
поэтому не рекомендуется вызывать его слишком часто,
особенно в циклах.appended или
удалены через remove, иногда reloadItems не
нужен, так как эти методы уже корректно обновляют внутреннюю структуру
сетки.var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
// Функция добавления элемента с анимацией
function addItem(content) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = content;
grid.appendChild(item);
pckry.reloadItems();
pckry.layout();
}
// Функция удаления элемента
function removeLastItem() {
var lastItem = grid.querySelector('.grid-item:last-child');
if (lastItem) {
grid.removeChild(lastItem);
pckry.reloadItems();
pckry.layout();
}
}
reloadItems — полностью пересоздаёт
внутренний массив элементов, подходящий для комплексных изменений.appended / prepended —
добавляют элементы в сетку без пересоздания всех элементов, что быстрее
при небольших вставках.// Быстрое добавление без полного пересчёта
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem); // обновление только для нового элемента
pckry.layout();
reloadItems только после значительных
изменений DOM.appended/remove с layout().reloadItems на каждом событии изменения
содержимого элемента; вместо этого собирать изменения и вызывать метод
один раз после всех модификаций.reloadItems является ключевым инструментом для работы с
динамическими сетками Packery. Он обеспечивает актуальность внутреннего
массива элементов после любых изменений DOM, позволяя корректно
применять последующий метод layout для перераспределения
элементов.
Правильная комбинация reloadItems с layout,
appended и remove позволяет создавать гибкие и
производительные сетки, способные адаптироваться к динамическому
контенту и изменяющимся условиям интерфейса.