Для работы с GridStack необходимо создать экземпляр сетки. Это
делается через статический метод
GridStack.init(options, selector) или напрямую через
конструктор new GridStack(el, options).
Пример инициализации через селектор:
const grid = GridStack.init({
column: 12,
float: true,
animate: true
}, '.grid-stack');
Параметры options включают:
column — количество колонок сетки.float — разрешение «плавающих» элементов, которые не
привязаны к сетке.animate — включение анимации при перетаскивании или
изменении размера.addWidget(el, options, x, y, width, height)Добавляет новый элемент в сетку.
el — HTML-элемент или разметка в виде строки.options — объект конфигурации виджета: id,
minWidth, maxWidth, minHeight,
maxHeight.x, y — координаты в сетке.width, height — размеры виджета.grid.addWidget('<div><div class="grid-stack-item-content">Новый блок</div></div>',
{id: 'item1'}, 0, 0, 3, 2);
removeWidget(el, removeDOM)Удаляет элемент из сетки.
el — DOM-элемент или селектор.removeDOM — если true, элемент будет
удалён из DOM полностью.grid.removeWidget(document.getElementById('item1'), true);
batchUpdate() и
commit()Позволяют объединять несколько изменений в одну операцию, что ускоряет работу и предотвращает лишние перерасчёты.
grid.batchUpdate();
grid.addWidget('<div><div class="grid-stack-item-content">Блок A</div></div>', {x:0, y:0, width:2, height:2});
grid.addWidget('<div><div class="grid-stack-item-content">Блок B</div></div>', {x:2, y:0, width:2, height:2});
grid.commit();
getGridItems()Возвращает массив всех виджетов сетки с их параметрами
(x, y, width, height, id).
const items = grid.getGridItems();
items.forEach(item => console.log(item.el, item.x, item.y, item.width, item.height));
getCellFromPixel(x, y)Позволяет определить ячейку сетки по координатам пикселя.
const cell = grid.getCellFromPixel(150, 200);
console.log(cell.x, cell.y);
isAreaEmpty(x, y, width, height)Проверяет, свободна ли область сетки для добавления нового виджета.
if(grid.isAreaEmpty(0, 0, 3, 2)) {
console.log('Область свободна');
}
move(el, x, y, width, height)Перемещает виджет в указанную позицию.
grid.move(document.getElementById('item1'), 2, 3, 4, 2);
resize(el, width, height)Изменяет размеры виджета без изменения его позиции.
grid.resize(document.getElementById('item1'), 3, 4);
enable() / disable()Включает или отключает возможность перетаскивания и изменения размеров.
grid.disable(); // блокировка всех виджетов
grid.enable(); // снова разрешает редактирование
float(boolean)Включение или отключение «плавающего» режима, где виджеты могут находиться поверх друг друга.
grid.float(true); // виджеты могут перекрываться
grid.float(false); // классическое позиционирование
GridStack предоставляет события для отслеживания действий:
change — когда виджет перемещён или изменён
размер.added — после добавления виджета.removed — после удаления виджета.grid.on('change', function(event, items) {
items.forEach(i => console.log('Изменён виджет:', i.el.id));
});
save()Возвращает текущее состояние сетки в виде массива объектов, включая координаты, размеры и id виджетов.
const state = grid.save();
load(state, clearGrid)Восстанавливает состояние сетки из сохранённых данных.
grid.load(state, true); // true очищает текущую сетку перед загрузкой
update(el, options)Позволяет обновить свойства виджета без его удаления. Основные опции:
x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight.
grid.update(document.getElementById('item1'), {width: 5, height: 3});
compact() — уплотняет сетку, перемещая элементы вверх
или влево.maxWidth() / maxHeight() — устанавливает
максимальные размеры сетки.getCellHeight() / getCellWidth() —
возвращает размеры ячеек в пикселях.on(event, callback) / off(event, callback)
— привязка и отвязка событий.Эти методы позволяют полностью управлять динамическими сетками и оптимизировать интерфейс под любые требования.