Метод destroy является важной частью API библиотеки
Packery и предназначен для полного удаления экземпляра сетки и всех
связанных с ним обработчиков событий. Его использование критически важно
при динамическом управлении DOM, когда требуется очистка ресурсов перед
удалением элементов или заменой макета.
destroy удаляет все внутренние структуры Packery,
включая:
resize, drag и
пользовательские колбэки.После вызова destroy объект Packery становится
неактивным, и повторный вызов методов управления макетом (например,
layout или append) приведет к ошибкам. Это
делает метод незаменимым для корректного освобождения памяти и
предотвращения утечек.
let pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10
});
pckry.destroy();
pckry — экземпляр Packery.undefined.Метод destroy не удаляет сами
DOM-элементы, он лишь отключает функциональность Packery. Если
требуется удалить элементы из DOM, это необходимо сделать отдельно:
pckry.destroy();
document.querySelector('.grid').remove();
Таким образом, destroy отвечает только за корректное
завершение работы Packery с существующими элементами.
При работе с динамическими сетками, где элементы добавляются или
удаляются после инициализации, destroy позволяет:
Пример последовательного использования:
// Инициализация
let grid = document.querySelector('.grid');
let pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
// Добавление новых элементов
let newItems = document.querySelectorAll('.new-item');
newItems.forEach(item => grid.appendChild(item));
// Перестроение макета
pckry.reloadItems();
pckry.layout();
// Полная очистка
pckry.destroy();
// Инициализация с нуля
pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 20
});
Если элементы сетки используют Draggabilly для
перетаскивания, перед вызовом destroy важно отключить
взаимодействие с drag-событиями. Packery автоматически снимает
обработчики, но прямое уничтожение Draggabilly экземпляров предотвращает
потенциальные утечки:
let draggies = pckry.getItemElements().map(item => new Draggabilly(item));
pckry.destroy();
draggies.forEach(draggie => draggie.destroy());
destroy следует использовать всегда, когда сетка
удаляется или полностью заменяется.destroy без повторной
инициализации.destroy с reloadItems и layout
при динамических изменениях контента.removeМетод remove удаляет элементы из сетки и DOM, но
оставляет экземпляр Packery активным. destroy полностью
очищает объект Packery, делая его неработоспособным, что делает его
критичным для освобождения памяти и предотвращения конфликтов при
повторной инициализации.
После вызова destroy:
Метод destroy является фундаментальным инструментом
управления жизненным циклом сетки и обеспечивает надежное завершение
работы Packery в сложных динамических интерфейсах.