Библиотека Packery предоставляет мощный API для
работы с сетками элементов, включая возможность отслеживания событий и
динамического управления ими через методы on и
off. Эти методы позволяют подписываться на события,
происходящие в процессе работы Packery, и при необходимости отключать
обработчики.
onМетод on используется для регистрации обработчика на
определённое событие. Синтаксис выглядит следующим образом:
packeryInstance.on(eventName, handlerFunction);
eventName – строка с названием
события. Packery поддерживает несколько событий, например:
layoutComplete – срабатывает после завершения
расстановки элементов;dragItemPositioned – срабатывает после перемещения
элемента, если используется Draggabilly;removeComplete – после удаления элементов;fitComplete – после применения метода fit
к элементу.handlerFunction –
функция-обработчик события. Она может принимать аргументы, которые
Packery передаёт в момент вызова события.
Пример использования:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10
});
pckry.on('layoutComplete', function(laidOutItems) {
console.log('Элементы выложены:', laidOutItems.length);
});
pckry.on('dragItemPositioned', function(item) {
console.log('Элемент перемещён:', item.element);
});
Ключевые моменты использования on:
on несколько раз с разными названиями событий.this внутри функции.eventName поддерживает только события, описанные в
документации Packery; пользовательские события можно создавать через
внешние инструменты, но Packery их напрямую не поддерживает.offМетод off удаляет ранее зарегистрированные обработчики
событий. Это важно для предотвращения утечек памяти и контроля за
поведением сетки при динамическом изменении контента.
Синтаксис:
packeryInstance.off(eventName, handlerFunction);
eventName – название события, с
которого нужно снять обработчик. Если аргумент опущен, удаляются все
обработчики всех событий.handlerFunction – ссылка на функцию,
которую нужно удалить. Если опущен, удаляются все обработчики данного
события.Пример:
function logLayout(items) {
console.log('Сетка выложена:', items.length);
}
pckry.on('layoutComplete', logLayout);
// Позже необходимо отключить обработчик
pckry.off('layoutComplete', logLayout);
Особенности метода off:
on. Анонимные функции нельзя удалить напрямую.pckry.off() без аргументов.off вместе с динамическим созданием
элементов позволяет эффективно управлять событиями при добавлении и
удалении элементов.on и offОтслеживание динамических изменений: При
добавлении новых элементов в сетку можно подписываться на
layoutComplete, чтобы сразу применять дополнительные стили
или анимации:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
pckry.on('layoutComplete', function(items) {
items.forEach(item => {
item.element.style.backgroundColor = '#f0f0f0';
});
});Взаимодействие с Draggabilly: Если элементы
можно перетаскивать, dragItemPositioned позволит
синхронизировать данные с сервером или обновлять позиции:
pckry.on('dragItemPositioned', function(item) {
saveItemPosition(item.element);
});
Для отключения обработчика после завершения определённых действий:
pckry.off('dragItemPositioned', saveItemPosition);Управление памятью при удалении элементов: При удалении элементов важно отключать обработчики, чтобы старые ссылки на элементы не сохранялись в памяти.
on для всех событий, где требуется реакция
на изменение сетки или действий пользователя.off для очистки обработчиков при динамическом
удалении элементов или при уничтожении экземпляра Packery:pckry.destroy();
pckry.off();
on и off помогают избежать
накопления ненужных слушателей и замедления интерфейса.Использование on и off в Packery
обеспечивает гибкое управление событиями сетки и позволяет создавать
динамичные, отзывчивые интерфейсы с точным контролем за поведением
элементов.