Метод destroy используется для полного отключения
экземпляра Masonry и возврата DOM-структуры в состояние, максимально
приближенное к исходному. После вызова этого метода библиотека
прекращает управление раскладкой элементов, удаляет созданные
обработчики событий и очищает служебные стили.
В рамках жизненного цикла Masonry destroy выполняет роль
финальной стадии работы экземпляра. Этот метод необходим в ситуациях,
когда динамический интерфейс больше не требует masonry-раскладки или
когда требуется повторная инициализация библиотеки.
При инициализации Masonry библиотека:
Метод destroy выполняет обратную операцию:
Это позволяет избежать утечек памяти и конфликтов при повторной инициализации.
msnry.destroy();
где msnry — экземпляр Masonry.
var grid = document.querySelector('.grid');
var msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10
});
// уничтожение экземпляра Masonry
msnry.destroy();
После выполнения:
После вызова destroy происходят следующие изменения.
Masonry управляет позиционированием элементов через стили:
position: absolute;
left: ...
top: ...
Метод destroy удаляет эти стили.
Пример до уничтожения:
<div class="grid-item" style="position:absolute; left:0px; top:200px;"></div>
После вызова:
<div class="grid-item"></div>
Элементы снова подчиняются стандартному CSS.
Контейнер Masonry также получает служебные стили, например:
position: relative;
height: ...
destroy очищает эти значения.
Masonry сохраняет внутренние данные через систему хранения:
element.masonryGUID
или аналогичные структуры. При уничтожении экземпляра эти данные удаляются, что освобождает память.
В процессе работы Masonry регистрирует несколько обработчиков:
resizelayoutCompleteremoveCompleteappendCompleteМетод destroy снимает все зарегистрированные
обработчики, предотвращая:
После уничтожения Masonry:
float, flex или grid
снова начинают работатьПример.
absolute positioning
computed layout by Masonry
standard block flow
После вызова destroy возможно повторное создание
экземпляра Masonry.
msnry.destroy();
msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 200
});
Это используется при:
destroy часто применяется при адаптивной верстке.
Некоторые интерфейсы используют Masonry только на больших экранах.
var msnry;
function checkLayout() {
if (window.innerWidth > 900) {
if (!msnry) {
msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 250
});
}
} else {
if (msnry) {
msnry.destroy();
msnry = null;
}
}
}
window.addEventListener('resize', checkLayout);
checkLayout();
В этом сценарии:
Интерфейсы часто переключают режимы отображения:
Метод destroy позволяет отключить masonry-раскладку
перед переключением.
function showListView() {
msnry.destroy();
document.body.classList.add('list-view');
}
function showGridView() {
msnry = new Masonry('.grid', {
itemSelector: '.grid-item'
});
}
В одностраничных приложениях (SPA) страницы не перезагружаются, поэтому необходимо корректно уничтожать экземпляры библиотек.
Без destroy возможны:
Пример.
function leavePage() {
if (msnry) {
msnry.destroy();
}
}
Если контейнер Masonry удаляется из DOM, предварительно рекомендуется
вызвать destroy.
msnry.destroy();
grid.remove();
Это предотвращает обращения библиотеки к несуществующим элементам.
Метод выполняет несколько этапов.
Каждый элемент Masonry содержит:
item.element.style.position
item.element.style.left
item.element.style.top
destroy очищает эти свойства.
Контейнер сбрасывает:
height
position
Masonry хранит данные через систему Outlayer. Метод
удаляет связь между DOM-элементом и экземпляром.
Удаляются слушатели:
resize
transitionend
Методы выполняют разные задачи.
Пример.
msnry.remove(itemElements);
msnry.layout();
reloadItems пересчитывает элементы Masonry.
destroy → полностью отключает библиотеку
reloadItems → обновляет список элементов
Перед вызовом destroy часто проверяется наличие
экземпляра.
if (msnry) {
msnry.destroy();
}
Это предотвращает ошибки:
Cannot read property 'destroy' of undefined
msnry.destroy();
msnry.destroy();
Если переменная не очищена, возможны ошибки.
Правильный вариант:
msnry.destroy();
msnry = null;
Иногда экземпляр уничтожается, но ссылка остаётся.
Это может привести к повторному использованию несуществующего объекта.
Если разработчик добавлял собственные события Masonry:
msnry.on('layoutComplete', handler);
их также следует удалить.
Пример интерфейса галереи с двумя режимами.
var msnry;
function enableMasonry() {
msnry = new Masonry('.gallery', {
itemSelector: '.item',
columnWidth: 200,
gutter: 10
});
}
function disableMasonry() {
if (msnry) {
msnry.destroy();
msnry = null;
}
}
Иногда требуется изменить конфигурацию Masonry.
function rebuildLayout(options) {
if (msnry) {
msnry.destroy();
}
msnry = new Masonry('.grid', options);
}
destroy выполняется быстро, поскольку:
Тем не менее при большом количестве элементов (1000+) очистка стилей может занимать заметное время.
Основные случаи применения:
1. Удаление Masonry из интерфейса
Когда layout больше не нужен.
2. Смена режима отображения
Переключение между grid / list / masonry.
3. Изменение конфигурации
Перед повторной инициализацией.
4. Удаление страницы в SPA
Освобождение памяти и обработчиков.
5. Перестройка DOM
Когда контейнер полностью заменяется.
| Свойство | Описание |
|---|---|
| Тип | метод экземпляра |
| Аргументы | отсутствуют |
| Возвращаемое значение | undefined |
| Назначение | уничтожение экземпляра Masonry |
| Побочный эффект | очистка DOM-стилей и событий |
Метод destroy используется вместе с другими методами
жизненного цикла:
layoutreloadItemsappendedremoveОни управляют активной работой Masonry, тогда как
destroy полностью завершает её.