Gridstack.js предоставляет мощный набор событий для отслеживания действий с виджетами в сетке. Эти события позволяют реагировать на добавление, удаление, перемещение и изменение размеров элементов. Все события можно использовать с помощью стандартного синтаксиса Jav * aScript:
grid.on('eventName', function(event, element) {
// обработка события
});
Где grid — объект сетки, eventName —
название события, element — DOM-элемент виджета.
dragstart — возникает в момент начала
перемещения виджета. Ключевые параметры:
el — DOM-элемент виджета.node — объект Gridstack, описывающий положение и
размеры: {x, y, w, h}.grid.on('dragstart', function(event, el, node) {
console.log('Начало перемещения:', node);
});
drag — событие вызывается на каждом
шаге перемещения. Полезно для динамического отображения координат.
grid.on('drag', function(event, el, node) {
console.log('Перемещение виджета:', node.x, node.y);
});
dragstop — срабатывает при завершении
перемещения. Именно здесь удобно фиксировать новые координаты виджета в
базе данных.
grid.on('dragstop', function(event, el, node) {
console.log('Конец перемещения, новые координаты:', node);
});
resizestart — начало изменения размеров
виджета. Позволяет сохранить исходные размеры перед изменением:
grid.on('resizestart', function(event, el, node) {
console.log('Исходные размеры:', node.w, node.h);
});
resize — событие изменения размеров в
процессе растягивания. Используется для динамического обновления
интерфейса:
grid.on('resize', function(event, el, node) {
console.log('Текущие размеры:', node.w, node.h);
});
resizestop — завершение изменения
размеров. Здесь удобно сохранять новые размеры:
grid.on('resizestop', function(event, el, node) {
console.log('Новые размеры:', node.w, node.h);
});
added — возникает при добавлении нового
виджета в сетку. Параметр nodes — массив объектов Gridstack
для добавленных элементов.
grid.on('added', function(event, nodes) {
nodes.forEach(node => console.log('Добавлен виджет:', node));
});
removed — событие удаления виджета.
Параметр nodes содержит объекты удаляемых виджетов.
grid.on('removed', function(event, nodes) {
nodes.forEach(node => console.log('Удалён виджет:', node));
});
change — ключевое событие,
срабатывающее при любых изменениях в сетке (перемещение или изменение
размера). Параметр changes — массив объектов с информацией
о виджетах:
grid.on('change', function(event, changes) {
changes.forEach(change => {
console.log(`Виджет ID ${change.id} изменился:`, change);
});
});
Каждый объект change содержит:
x, y — новые координаты;w, h — новые размеры;el — DOM-элемент виджета.Это событие удобно использовать для синхронизации данных между клиентом и сервером.
dropped — возникает при перетаскивании
элемента из внешнего источника (draggable) в сетку. Позволяет
динамически добавлять новые виджеты и сразу их конфигурировать.
grid.on('dropped', function(event, previousWidget, newWidget) {
console.log('Виджет перенесён из внешнего источника:', newWidget);
});
activate / deactivate —
события, используемые для визуального выделения активного виджета.
grid.on('activate', function(event, el) {
el.classList.add('active-widget');
});
grid.on('deactivate', function(event, el) {
el.classList.remove('active-widget');
});
Promise или async/await
внутри обработчиков dragstop и
resizestop.drag и
resize стоит применять дебаунс, чтобы избежать чрезмерного
количества вызовов.change событие лучше использовать
вместо отдельных dragstop и resizestop, чтобы
минимизировать количество обработок.added и removed полезны для
динамической генерации интерфейса и синхронизации с базой данных.dragstop и resizestop
позволяет обеспечить точное позиционирование виджетов после завершения
действий пользователя.Эта структура событий Gridstack.js обеспечивает полное покрытие всех взаимодействий с виджетами и позволяет строить гибкие, динамические интерфейсы с высокой отзывчивостью.