Для работы с элементами в Gridstack.js сначала необходимо создать
контейнер сетки и инициализировать его. Контейнер определяется через
обычный HTML-элемент, например div, с классом
grid-stack. После этого подключается метод
.gridstack() для превращения контейнера в рабочую
сетку.
const grid = GridStack.init({
column: 12,
float: true,
animate: true
});
Параметры инициализации:
column — количество колонок в сетке.float — разрешает свободное перемещение элементов по
вертикали.animate — включает анимацию при перемещении и изменении
размеров элементов.Создание нового элемента происходит с помощью метода
addWidget. Он принимает объект с настройками позиции и
размеров:
grid.addWidget({
x: 0,
y: 0,
width: 4,
height: 2,
content: '<div class="grid-stack-item-content">Элемент</div>'
});
Ключевые свойства:
x, y — координаты элемента в сетке.width, height — размеры элемента в
единицах сетки.content — HTML-контент, который будет отображаться
внутри элемента.Методы работы с существующими элементами позволяют получать информацию о положении и размерах, а также динамически изменять их.
const widgets = grid.getGridItems();
widgets.forEach(widget => {
const node = widget.gridstackNode;
console.log(`Элемент на позиции x: ${node.x}, y: ${node.y}`);
});
Основные методы для работы с элементами:
getGridItems() — возвращает массив всех элементов
сетки.update(widget, options) — обновляет параметры элемента.
Пример:grid.update(widget, {width: 6, height: 3});
move(widget, x, y) — перемещает элемент в указанные
координаты.resize(widget, width, height) — изменяет размеры
элемента.removeWidget(widget) — удаляет элемент из сетки.Gridstack.js предоставляет богатый набор событий для отслеживания действий с элементами.
Основные события:
added — элемент был добавлен в сетку.removed — элемент удален.change — произошло изменение позиции или размеров
элемента.dragstart / dragstop — начало и завершение
перетаскивания.resizestart / resizestop — начало и
завершение изменения размеров.Пример подписки на событие изменения:
grid.on('change', (event, items) => {
items.forEach(item => {
console.log(`Элемент ${item.id} изменен: x=${item.x}, y=${item.y}`);
});
});
Каждому элементу можно назначать CSS-классы и стили как при создании, так и динамически после добавления:
widget.el.classList.add('highlight');
widget.el.style.backgroundColor = '#f0f0f0';
Методы для работы с классами и стилями:
el.classList.add/remove/toggle() — управление классами
элемента.el.style — управление inline-стилями элемента.Gridstack.js позволяет сохранять текущее состояние элементов и восстанавливать его позднее. Для этого используется сериализация:
const serialized = grid.save();
console.log(serialized);
Для восстановления состояния:
grid.load(serialized);
Преимущества сериализации:
Добавление элементов может происходить не только при инициализации, но и в любой момент работы приложения:
const newWidget = grid.addWidget({
x: 2,
y: 1,
width: 3,
height: 2,
content: '<div class="grid-stack-item-content">Новый элемент</div>'
});
Удаление элемента по ссылке на его DOM-элемент:
grid.removeWidget(newWidget.el);
Использование методов addWidget и
removeWidget совместно с событиями позволяет создавать
динамичные интерфейсы, где элементы могут появляться, исчезать и
изменять размеры в реальном времени.
Для получения конкретного элемента можно использовать методы поиска или фильтрации:
const widget = grid.engine.nodes.find(node => node.id === 'my-widget');
grid.update(widget.el, {width: 5, height: 2});
Практические сценарии:
Эти методы дают полный контроль над всеми объектами сетки, обеспечивая гибкость в создании сложных интерфейсов.