Gridstack.js предоставляет мощный API для динамического управления сеткой, включая возможность добавлять новые элементы программно. Это особенно полезно при создании дашбордов, интерактивных интерфейсов и динамических страниц, где количество и расположение виджетов меняется во время работы приложения.
Для добавления элементов в Gridstack используется метод
addWidget(). Его базовый синтаксис:
grid.addWidget(el, x, y, width, height, autoPosition);
Параметры:
el – HTML-элемент или строка с HTML-разметкой нового
виджета.x – координата X в сетке (столбец).y – координата Y в сетке (ряд).width – ширина виджета в единицах сетки.height – высота виджета в единицах сетки.autoPosition – булево значение, если true,
Gridstack автоматически подбирает позицию для элемента.Пример добавления простого виджета:
const widget = '<div class="grid-stack-item"><div class="grid-stack-item-content">Новый виджет</div></div>';
grid.addWidget(widget, 0, 0, 2, 2, true);
В этом примере создается виджет размером 2x2 блока, который Gridstack автоматически размещает в сетке.
Вместо передачи отдельных параметров можно использовать объект с конфигурацией виджета:
const widgetConfig = {
x: 1,
y: 1,
width: 3,
height: 2,
content: '<div class="grid-stack-item-content">Контент виджета</div>'
};
grid.addWidget(widgetConfig);
Ключевые моменты:
x, y, width,
height – координаты и размер.content – HTML-разметка, которая будет помещена внутрь
виджета.content в элемент с
классом grid-stack-item.Gridstack поддерживает добавление массивов объектов виджетов, что ускоряет процесс динамического построения сетки:
const widgets = [
{ x: 0, y: 0, width: 2, height: 2, content: 'Виджет 1' },
{ x: 2, y: 0, width: 2, height: 2, content: 'Виджет 2' },
{ x: 0, y: 2, width: 4, height: 1, content: 'Виджет 3' }
];
widgets.forEach(w => grid.addWidget(w));
Такой подход позволяет создавать целые панели или дашборды программно, без ручного управления DOM.
После добавления виджета можно программно изменять его координаты и
размеры с помощью методов update() или
updateNode():
const node = grid.addWidget('<div class="grid-stack-item"><div class="grid-stack-item-content">Динамика</div></div>');
grid.update(node, { width: 3, height: 3, x: 1, y: 1 });
Метод update() принимает объект с любыми изменяемыми
параметрами:
x, y – новые координаты.width, height – новые размеры.autoPosition – если требуется автоматическая
корректировка позиции.Можно сразу добавлять виджеты с привязанными обработчиками событий:
const widget = document.createElement('div');
widget.classList.add('grid-stack-item');
widget.innerHTML = '<div class="grid-stack-item-content">Кликабельный виджет</div>';
widget.addEventListener('click', () => {
alert('Виджет нажат');
});
grid.addWidget(widget, 0, 0, 2, 2);
Такой подход позволяет создавать интерактивные элементы прямо при добавлении в сетку.
Для повторяющихся виджетов удобно использовать шаблоны или клонировать существующие элементы:
const template = document.querySelector('#widget-template');
for (let i = 0; i < 5; i++) {
const clone = template.content.cloneNode(true);
grid.addWidget(clone, i, 0, 2, 2);
}
Это позволяет создавать однородные блоки с одинаковой структурой, избегая повторного написания HTML.
grid-stack-item и вложенный
grid-stack-item-content.const widgetsData = [
{ width: 2, height: 2, content: '<div>Виджет A</div>' },
{ width: 3, height: 1, content: '<div>Виджет B</div>' },
{ width: 1, height: 3, content: '<div>Виджет C</div>' }
];
widgetsData.forEach(data => {
grid.addWidget({
...data,
autoPosition: true
});
});
В этом примере создаются три виджета разных размеров с автоматическим размещением, обеспечивая адаптивное заполнение сетки.
Gridstack.js предоставляет гибкий и расширяемый API для динамического управления сеткой, позволяя добавлять элементы программно, изменять их параметры и создавать интерактивные интерфейсы с минимальным количеством ручного DOM-кода.