Gridstack.js предоставляет мощный механизм для обработки
пользовательских событий, который позволяет управлять действиями
пользователей на сетке: перемещением, изменением размеров и удалением
виджетов. Все события генерируются непосредственно экземпляром сетки и
могут быть перехвачены через методы .on() или через
слушатели на уровне DOM.
События делятся на две основные категории:
widget).Gridstack.js поддерживает несколько ключевых событий виджетов:
added – возникает после добавления
нового элемента на сетку.change – возникает при любом изменении
позиции или размера виджета.removed – возникает после удаления
виджета из сетки.dragstart, drag,
dragstop – последовательность событий при
перетаскивании виджета.resizestart, resize,
resizestop – последовательность событий при
изменении размеров виджета.Пример подключения обработчика для события добавления виджета:
const grid = GridStack.init();
grid.on('added', function(event, items) {
console.log('Добавлены виджеты:', items);
});
event – объект события JavaScript.items – массив объектов, каждый из которых описывает
добавленный виджет (позиция, размеры, DOM-элемент).События сетки реагируют на изменения всей структуры. Основные события:
change – вызывается при любом
изменении сетки, например, при перемещении или изменении размеров любого
виджета.dragstart, dragstop –
отслеживают начало и завершение всех операций перетаскивания на
сетке.resizestart, resizestop –
отслеживают операции изменения размеров на всей сетке.Пример отслеживания изменения сетки:
grid.on('change', function(event, items) {
items.forEach(item => {
console.log(`Виджет ${item.el.id} перемещен в (${item.x}, ${item.y}) размер (${item.w}x${item.h})`);
});
});
Перетаскивание виджетов можно детально контролировать через события
dragstart, drag, dragstop.
dragstart – срабатывает в момент
начала перемещения виджета. Позволяет задать ограничения или изменить
визуальные эффекты:grid.on('dragstart', function(event, el) {
el.style.border = "2px dashed red";
});
drag – срабатывает на каждом шаге
перемещения, можно обновлять интерфейс в реальном времени.dragstop – срабатывает после окончания
перемещения, здесь выполняется фиксация позиции:grid.on('dragstop', function(event, el) {
el.style.border = "";
console.log(`Виджет ${el.id} установлен на новую позицию`);
});
События изменения размеров виджета (resizestart,
resize, resizestop) позволяют динамически
реагировать на изменение размеров:
grid.on('resizestart', function(event, el) {
console.log(`Начато изменение размера виджета ${el.id}`);
});
grid.on('resize', function(event, el) {
console.log(`Текущий размер виджета ${el.id}: ${el.offsetWidth}x${el.offsetHeight}`);
});
grid.on('resizestop', function(event, el) {
console.log(`Изменение размера виджета ${el.id} завершено`);
});
Особенность Gridstack.js заключается в том, что эти события срабатывают только после того, как изменение виджета прошло через внутреннюю сетку, что обеспечивает точное соответствие логики сетки и интерфейса.
Для передачи дополнительных данных при событиях можно использовать
объект data в DOM-элементе виджета:
const node = document.createElement('div');
node.dataset.widgetType = 'chart';
grid.addWidget(node, {w:3, h:2});
grid.on('added', function(event, items) {
items.forEach(item => {
console.log('Тип виджета:', item.el.dataset.widgetType);
});
});
Это позволяет связывать события с конкретными бизнес-данными без изменения глобального состояния.
Gridstack.js позволяет работать с событиями и через стандартное делегирование DOM, например:
document.querySelector('.grid-stack').addEventListener('gsresizestop', function(e) {
console.log('Resize через DOM-событие:', e.detail);
});
gs (например,
gsdragstart, gsresizestop).e.detail передается объект с данными виджета и
информацией о событии.Такой подход полезен для интеграции с фреймворками, где требуется реактивная обработка через нативные события.
.on() вместо прямых слушателей
DOM, если требуется точная синхронизация с внутренним
состоянием Gridstack.item.el.id или data-* атрибуты, чтобы
обработчики не срабатывали на всех виджетах сразу.added и
removed, чтобы автоматически управлять ресурсами
(например, удалять графики или таймеры внутри виджета).Эта система событий делает Gridstack.js гибкой платформой для построения динамических интерфейсов, где каждый виджет и сетка в целом полностью управляются через JavaScript. Обработка событий позволяет точно контролировать визуальные эффекты, синхронизацию данных и пользовательский опыт без вмешательства в исходную структуру сетки.