Gridstack.js — это JavaScript-библиотека для
создания динамических сеточных интерфейсов с возможностью перетаскивания
и изменения размеров элементов. Основная идея заключается в том, что
каждый блок в сетке представлен объектом с координатами x и
y, размерами width и height и
уникальным идентификатором. Сетка сама управляет размещением элементов и
автоматически перестраивает соседние блоки при изменении их положения
или размера.
Gridstack.js реализует две ключевые функциональности: drag-and-drop и resizable элементы, сохраняя сетку отзывчивой и управляемой. Он работает как с фиксированными размерами блоков, так и с адаптивными сетками, где ширина и высота элементов изменяются относительно родительского контейнера.
Для создания сетки требуется подключить CSS и JS файлы библиотеки и инициализировать сетку на контейнере:
const grid = GridStack.init({
float: true,
column: 12,
cellHeight: 80,
margin: 5,
});
float: true — позволяет элементам свободно перемещаться
по сетке, не ограничиваясь строго координатами.column: 12 — количество колонок в сетке.cellHeight: 80 — высота каждой ячейки в пикселях.margin: 5 — отступы между блоками.Элементы сетки добавляются как обычные div с атрибутами
gs-x, gs-y, gs-width,
gs-height:
<div class="grid-stack">
<div class="grid-stack-item" gs-x="0" gs-y="0" gs-width="4" gs-height="2">
<div class="grid-stack-item-content">Блок 1</div>
</div>
<div class="grid-stack-item" gs-x="4" gs-y="0" gs-width="4" gs-height="2">
<div class="grid-stack-item-content">Блок 2</div>
</div>
</div>
Каждый элемент может быть динамически добавлен или удален через API:
grid.addWidget({
x: 0,
y: 2,
width: 4,
height: 2,
content: '<div class="grid-stack-item-content">Новый блок</div>'
});
Gridstack.js позволяет не только перетаскивать элементы мышью, но и
программно управлять их координатами и размерами. Методы
move, resize и removeWidget
являются базовыми инструментами для динамического изменения
интерфейса:
grid.getWidgetById('block1').move(2, 3); // перемещение на x=2, y=3
grid.getWidgetById('block1').resize(6, 4); // изменение ширины и высоты
grid.removeWidget(document.querySelector('#block2')); // удаление блока
Поддерживается событийная модель. Основные события:
added — элемент добавлен в сетку.change — изменение положения или размера.removed — элемент удалён из сетки.dragstart, dragstop,
resizestart, resizestop — контроль за
процессом перетаскивания и изменения размеров.События позволяют связывать сетку с сервером для сохранения состояния интерфейса или динамически изменять содержимое блоков.
Gridstack.js поддерживает адаптивность через breakpoints и динамическое изменение количества колонок. Например, для разных размеров экрана можно настроить разное количество колонок и размеры ячеек:
const grid = GridStack.init({
column: 12,
breakpoints: { lg: 1200, md: 992, sm: 768, xs: 480 },
columnWidths: { lg: 80, md: 60, sm: 50, xs: 40 }
});
При изменении ширины окна сетка автоматически перестраивает элементы, сохраняя порядок и пропорции. Это особенно важно для дашбордов, где пользовательский интерфейс должен оставаться удобным на разных устройствах.
Каждый элемент сетки имеет контейнер
grid-stack-item-content, куда помещается любой
HTML-контент: графики, таблицы, виджеты, формы. Для стилизации элементов
можно использовать CSS и flexbox внутри блока, чтобы контент
автоматически адаптировался к размеру ячейки:
.grid-stack-item-content {
background-color: #f4f4f4;
border: 1px solid #ccc;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
Gridstack.js поддерживает nested grids, то есть сетка внутри сетки. Это позволяет создавать сложные интерфейсы с внутренними контейнерами, которые могут быть перетаскиваемыми и изменяемыми независимо от основной сетки.
Для дашбордов крайне важно сохранять расположение блоков.
Gridstack.js предоставляет методы save() и
load():
const layout = grid.save(); // сохраняет состояние сетки в массив
// пример сохранения на сервер
fetch('/save-layout', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(layout)
});
// восстановление состояния
grid.load(layout);
Эта функциональность делает возможным персонализацию интерфейса для каждого пользователя, запоминая его настройки.
Gridstack.js хорошо сочетается с визуализацией данных, например:
Такое сочетание позволяет создавать полностью интерактивные дашборды, где пользователь может не только просматривать данные, но и перестраивать интерфейс под свои задачи.
Gridstack.js предоставляет дополнительные функции:
Эти инструменты делают библиотеку гибкой для широкого спектра дашборд-интерфейсов: от аналитических панелей до редакторов контента и рабочих панелей приложений.
Gridstack.js позволяет создавать сложные, интерактивные и адаптивные интерфейсы, обеспечивая полное управление положением и размером элементов, поддержку динамического контента и сохранение пользовательских настроек. Сочетание удобного API, событийной модели и отзывчивости делает её идеальной для реализации современных дашбордов.