В библиотеке Muuri управление элементами сетки не ограничивается только их созданием и сортировкой — ключевое место занимает возможность удаления или уничтожения элементов. Правильное уничтожение элементов важно для освобождения ресурсов, предотвращения утечек памяти и поддержания производительности интерфейса при динамическом изменении содержимого.
grid.remove()Метод remove позволяет удалить один или несколько
элементов из сетки. Он принимает следующие параметры:
grid.remove(items, options);
items — элемент, массив элементов или объект
Muuri.Item.
options — объект с дополнительными настройками удаления:
removeElements (boolean) — если true,
DOM-элементы будут удалены из документа. По умолчанию
true.sort (boolean) — если true, элементы после
удаления пересортируются. По умолчанию true.layout (boolean) — если true, после
удаления будет выполнена новая компоновка сетки. По умолчанию
true.Пример:
const itemsToRemove = grid.getItems('.to-remove');
grid.remove(itemsToRemove, { removeElements: true, layout: true });
В этом примере все элементы с классом .to-remove будут
удалены из DOM и сетки, а оставшиеся элементы перераспределены.
item.remove()Каждый объект Muuri.Item имеет собственный метод
remove. Он обеспечивает более точечное управление, если
нужно удалить элемент по ссылке на объект Item.
item.remove([options]);
Параметры идентичны опциям grid.remove(). Пример
удаления одного элемента:
const item = grid.getItem(element);
item.remove({ removeElements: true });
Метод remove удобен в случаях, когда элементы уже
обработаны сеткой и нужно удалить конкретный объект без дополнительного
поиска в DOM.
Для полного удаления сетки, включая все элементы и внутренние слушатели событий, используется метод:
grid.destroy([keepElements]);
true,
DOM-элементы останутся на странице; если false или не
указан, элементы будут удалены.Пример:
grid.destroy(false); // Полное уничтожение сетки вместе с DOM
После вызова destroy объект grid становится
недействительным, и все методы Muuri больше нельзя применять.
Удаление из DOM и памяти Удаление элементов с
помощью removeElements: true гарантирует, что ссылки на DOM
очищаются и память освобождается. Без этого при динамическом создании и
удалении элементов возможны утечки памяти.
Обновление компоновки Если не требуется
перераспределять элементы после удаления, можно указать
layout: false для повышения производительности при массовом
удалении.
grid.remove(items, { layout: false });
const hiddenItems = grid.getItems(item => !item.getElement().classList.contains('active'));
grid.remove(hiddenItems, { removeElements: true, layout: true });
remove и removeEnd. Их можно использовать для
выполнения действий после удаления, например, анимаций или
логирования:grid.on('removeEnd', (items) => {
console.log('Удалены элементы:', items);
});
removeElements: true, если элемент больше не нужен.layout
на время удаления и выполнять компоновку после завершения операции.destroy(false).const itemsToDelete = grid.getItems(item => item.getElement().dataset.status === 'obsolete');
grid.remove(itemsToDelete, { removeElements: true, layout: false });
grid.layout(true); // единоразовая компоновка после удаления
grid.getItems('.fade-out').forEach(item => {
item.getElement().classList.add('fade');
setTimeout(() => item.remove({ removeElements: true }), 500);
});
В этом примере элементы сначала получают анимацию исчезновения, а затем удаляются из DOM и сетки.
Управление удалением элементов в Muuri — это
сочетание гибкости и контроля над ресурсами. Понимание методов
remove, item.remove и destroy
позволяет создавать динамичные и эффективные сетки без утечек памяти и с
корректной компоновкой элементов.