Gridstack.js — это библиотека на JavaScript, предназначенная для создания интерактивных сеток с поддержкой перетаскивания и изменения размеров элементов (drag-and-drop, resizable widgets). Она позволяет создавать динамичные, адаптивные интерфейсы с минимальными усилиями, сохраняя при этом гибкость и контроль над расположением компонентов.
Одной из ключевых возможностей Gridstack.js является динамическое добавление и удаление элементов. Каждый виджет (элемент сетки) может быть создан программно или удалён без перезагрузки страницы. Это достигается через методы:
addWidget(el, options) — добавляет новый виджет в сетку
с указанием его размеров и позиции.removeWidget(el, detachNode) — удаляет виджет, с
возможностью полного удаления DOM-элемента.batchUpdate() и commit() — позволяют
производить множественные изменения с минимальным количеством
перерисовок, повышая производительность.Drag-and-drop и resizable — основные функции интерактивности. Gridstack.js обеспечивает:
axis: 'x' | 'y' | 'both').minWidth,
maxWidth, minHeight,
maxHeight.locked: true) для
запрета перемещения и изменения размера.dragstart, drag, dragstop,
resizestart, resize,
resizestop.Пример настройки виджета с ограничениями:
grid.addWidget({
x: 0,
y: 0,
width: 4,
height: 2,
minWidth: 2,
maxWidth: 6,
resizable: { handles: 'se' }
});
Gridstack.js автоматически адаптирует сетку под размер контейнера, что особенно важно для мобильных устройств и различных разрешений экрана. Доступны следующие возможности:
column с
изменением в зависимости от ширины контейнера.autoPosition: true).grid-stack
использует flex и positioning для плавного
расположения элементов).Gridstack.js предоставляет широкий набор событий, что позволяет интегрировать сетку с другими библиотеками и собственным кодом:
change — вызывается при изменении позиции или размера
виджета.added / removed — уведомляют о добавлении
или удалении элементов.drag и resize — позволяют отслеживать и
кастомизировать поведение во время интерактивных действий.События могут быть использованы для синхронизации состояния с сервером или сохранения конфигурации пользователя:
grid.on('change', function(event, items) {
items.forEach(item => {
console.log(`Виджет ${item.el.id} перемещён в (${item.x}, ${item.y})`);
});
});
Gridstack.js поддерживает расширяемость и тонкую настройку:
Gridstack.js позволяет сохранять и восстанавливать расположение виджетов:
save() возвращает текущее состояние сетки в виде
JSON.load(nodes) позволяет загрузить сохранённое
состояние.let state = grid.save();
grid.load(state);
Gridstack.js разработан с учётом высокой производительности:
batchUpdate() и commit().Эти возможности делают Gridstack.js мощным инструментом для создания динамичных дашбордов, интерактивных интерфейсов управления и гибких модульных систем на JavaScript.