Gridstack.js предоставляет мощный механизм для управления сеткой и её элементами. Удаление виджетов (элементов) является одной из ключевых операций, особенно при динамическом управлении интерфейсом. В Gridstack.js удаление может происходить как программно, так и через встроенные события, что позволяет гибко контролировать состояние сетки.
removeWidgetОсновной способ удаления элемента из сетки — использование метода
removeWidget. Он полностью удаляет элемент из DOM и
освобождает ресурсы, связанные с ним в Gridstack.
// Получение Gridstack instance
const grid = GridStack.init();
// Поиск виджета по селектору или элементу DOM
const widget = document.querySelector('.grid-stack-item');
// Удаление виджета
grid.removeWidget(widget);
Ключевые моменты:
removeWidget принимает DOM-элемент,
который является корневым контейнером виджета
(.grid-stack-item).Для плавного визуального удаления можно сочетать
removeWidget с CSS-анимациями. Gridstack.js сам по себе не
предоставляет анимации, но позволяет интегрировать кастомные
эффекты:
const widget = document.querySelector('.grid-stack-item');
widget.classList.add('fade-out'); // CSS класс с анимацией
widget.addEventListener('transitionend', () => {
grid.removeWidget(widget);
});
Совет: использовать событие
transitionend, чтобы гарантировать полное завершение
анимации перед удалением DOM-элемента.
Gridstack.js поддерживает удаление виджета при перемещении
его за пределы сетки. Для этого используется опция
removeTimeout и обработчик события
removed:
const grid = GridStack.init({
removable: '.trash', // селектор контейнера для удаления
removeTimeout: 300 // время в миллисекундах перед удалением
});
grid.on('removed', (event, items) => {
console.log('Удалённые виджеты:', items);
});
Особенности:
removable указывает область, при попадании в
которую виджет будет удалён.removeTimeout позволяет задать задержку для
предотвращения случайного удаления.removed предоставляет массив удалённых
виджетов, что удобно для синхронизации с сервером или локальным
хранилищем.Иногда требуется очистить сетку полностью. Для этого Gridstack.js
предлагает метод removeAll:
grid.removeAll();
Поведение removeAll:
Можно реализовать удаление виджетов на основе определённых условий, например, по классу, идентификатору или данным:
const widgets = grid.engine.nodes; // все виджеты
widgets.forEach(widget => {
if (widget.el.dataset.type === 'temporary') {
grid.removeWidget(widget.el);
}
});
Пояснения:
grid.engine.nodes возвращает внутренний массив всех
элементов сетки.widget.el — это DOM-элемент виджета.Gridstack.js генерирует события при удалении элементов, которые можно использовать для синхронизации состояния приложения:
removed — вызывается после фактического удаления
элемента.change — срабатывает при изменении структуры сетки,
включая удаление.grid.on('removed', (event, items) => {
items.forEach(item => {
console.log('Удалён элемент с id:', item.el.id);
});
});
Применение: можно отправлять информацию на сервер или обновлять пользовательский интерфейс, например, счётчик активных виджетов.
removeWidget.removed и change помогают избежать
рассинхронизации интерфейса.removeAll вместо
последовательного вызова removeWidget.Gridstack.js предоставляет гибкий и безопасный механизм удаления виджетов, который интегрируется с событиями и логикой сетки, позволяя создавать динамические интерфейсы с контролем за состоянием каждого элемента.