Событие layoutComplete является одним из ключевых
инструментов для отслеживания завершения процесса расположения элементов
в сетке Packery. Оно позволяет точно понимать момент, когда все элементы
были перерасположены согласно текущим настройкам сетки, и может
использоваться для дальнейших действий, таких как анимации, обновление
интерфейса или синхронизация с другими библиотеками.
Packery управляет размещением элементов на сетке с учетом их размеров
и доступного пространства. Иногда необходимо отследить момент, когда
перестановка элементов полностью завершена. Именно для этого и
предназначено событие layoutComplete.
Событие генерируется автоматически каждый раз после
завершения метода layout() или других операций, влияющих на
расположение элементов. Оно полезно при динамических изменениях
сетки, таких как:
appended)remove)Подписка на событие выполняется с помощью метода on
экземпляра Packery:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
pckry.on('layoutComplete', function(laidOutItems) {
console.log('Сетка завершила компоновку', laidOutItems);
});
Параметры функции обратного вызова:
laidOutItems — массив элементов, которые были
перерасположены при последнем вызове layout(). Каждый
элемент представляет собой DOM-узел или объект Packery с дополнительными
свойствами (например, x, y позиции).pckry.on('layoutComplete', function(laidOutItems) {
laidOutItems.forEach(function(item) {
item.classList.add('fade-in');
});
});
Например, при использовании библиотеки изображений для lazy-loading:
imagesLoaded(grid, function() {
pckry.layout();
});
pckry.on('layoutComplete', function(laidOutItems) {
console.log('Все изображения и элементы расположены');
});
Можно изменять показатели состояния, подсчитывать видимые элементы
или запускать статистику после каждого layoutComplete.
pckry.on('layoutComplete', function(laidOutItems) {
document.querySelector('#counter').textContent = laidOutItems.length;
});
arrangeCompletePackery также предоставляет событие arrangeComplete,
которое срабатывает при завершении любой перестановки
элементов, включая сортировку и фильтрацию. Отличие заключается
в том, что layoutComplete отслеживает только
перераспределение элементов без фильтрации, то есть
чисто визуальную компоновку.
Использование правильного события позволяет точно контролировать, какие операции должны инициировать последующие действия.
Если сетка регулярно обновляется (добавление/удаление элементов),
важно пересоздавать layout или корректно вызывать методы
appended и remove для Packery:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
pckry.on('layoutComplete', function(laidOutItems) {
console.log('Новые элементы успешно расположены');
});
Событие layoutComplete автоматически срабатывает после
этих операций, предоставляя актуальную информацию о состоянии сетки.
transitionDuration.laidOutItems возвращает именно те элементы, которые
были перерасположены в последнем layout, что позволяет избежать лишней
обработки всех элементов сетки.Для комплексного управления сеткой часто применяют несколько событий Packery одновременно:
dragItemPositioned — элемент перемещен
пользователемlayoutComplete — все элементы перерасположеныremoveComplete — удаление элементов завершеноappended — новые элементы добавлены и расположеныТакой подход обеспечивает полный контроль над состоянием сетки на всех этапах работы.
Эти знания позволяют использовать layoutComplete
максимально эффективно, создавая динамические и отзывчивые сетки,
управлять анимациями и интегрировать Packery с другими библиотеками для
сложных интерфейсов.