Библиотека Gridstack.js предоставляет мощный инструмент для создания динамических, интерактивных сеточных интерфейсов с поддержкой перетаскивания, изменения размеров и автоматической перестройки элементов. Одним из ключевых аспектов работы с Gridstack является понимание событий, которые позволяют отслеживать действия пользователя и программно реагировать на них.
События Gridstack можно разделить на несколько групп:
drag)resize)add,
remove)change,
changeNode)Каждое из этих событий можно использовать как на уровне отдельного элемента, так и для всей сетки в целом.
dragstart Срабатывает при начале перетаскивания элемента. Позволяет зафиксировать текущее состояние элемента, подготовить данные для визуальных эффектов или заблокировать определенные направления движения.
Пример использования:
grid.on('dragstart', function(event, ui) {
console.log('Начало перетаскивания', ui.node);
});
drag Событие срабатывает при каждом движении элемента. Позволяет отслеживать координаты в реальном времени и реализовать, например, динамическое позиционирование сопутствующих элементов.
dragstop Происходит в момент завершения перетаскивания. В этот момент элемент фиксируется на новом месте, а сетка пересчитывает расположение остальных виджетов.
grid.on('dragstop', function(event, ui) {
console.log('Элемент перемещен', ui.node.x, ui.node.y);
});
resizestart Срабатывает при начале изменения размеров элемента. Можно использовать для установки ограничений или визуальных подсказок.
resize Происходит в процессе изменения размеров. Обеспечивает возможность динамически адаптировать контент внутри виджета.
resizestop Срабатывает по завершении изменения размеров. В этот момент новые размеры элемента фиксируются в структуре сетки.
grid.on('resizestop', function(event, ui) {
console.log('Новые размеры:', ui.node.w, ui.node.h);
});
added Срабатывает при добавлении нового элемента в сетку. Обычно используется для инициализации нового виджета: добавления событий внутри него, загрузки контента или применения стилей.
grid.on('added', function(event, items) {
items.forEach(function(node) {
console.log('Добавлен новый элемент:', node.el);
});
});
removed Происходит при удалении элемента из сетки. Позволяет очищать ресурсы, удалять связанные события и обновлять внешние интерфейсы.
grid.on('removed', function(event, items) {
items.forEach(function(node) {
console.log('Удален элемент:', node.el);
});
});
change Срабатывает при любом изменении позиции или размеров виджетов, в том числе в результате перетаскивания и ресайза. Предоставляет полный массив измененных элементов с их новыми координатами.
grid.on('change', function(event, items) {
items.forEach(function(node) {
console.log('Изменен элемент:', node.id, 'новые координаты:', node.x, node.y);
});
});
changeNode Отдельное событие для конкретного виджета. Срабатывает при изменении его позиции или размеров. Полезно для оптимизации работы при множественных изменениях, когда нужна реакция только на конкретный элемент.
Gridstack поддерживает взаимодействие с другими контейнерами через drag in/out:
Эти события полезны для реализации интерфейсов с перемещением элементов между различными панелями.
on вместо прямого
назначения колбэка к каждому виджету для глобального управления
событиями сетки.ui.node для получения
данных о позиции, размере и идентификаторе виджета, чтобы легко
синхронизировать с сервером или другими компонентами интерфейса.События Gridstack.js обеспечивают полный контроль над поведением сетки, дают возможность строить сложные интерфейсы с динамическим управлением элементами и позволяют реализовать гибкую синхронизацию с внешними данными и компонентами.