Gridstack.js предоставляет гибкую систему для создания сеток с перетаскиваемыми и изменяемыми блоками. Одной из продвинутых возможностей является использование дочерних сеток, которые позволяют вложить одну сетку внутри другой и управлять её поведением независимо от родительской сетки. Рассмотрим основные аспекты конфигурации дочерних сеток, их параметры и практическое применение.
Для создания дочерней сетки внутри родительского элемента
используется стандартный метод GridStack.init(), при этом
дочерняя сетка может иметь собственные настройки:
const parentGrid = GridStack.init({cellHeight: 80, margin: 10});
const childGrid = GridStack.init({
staticGrid: false,
cellHeight: 60,
column: 4,
disableResize: false
}, document.querySelector('.child-grid'));
Ключевые моменты:
document.querySelector('.child-grid') — указание
контейнера дочерней сетки.cellHeight и column для дочерней
сетки могут отличаться от родительской.staticGrid позволяет включить или отключить возможность
перетаскивания и изменения размера блоков.Дочерние сетки поддерживают большинство опций родительской сетки, но есть особенности при вложении:
column — количество колонок в дочерней
сетке. Не обязательно совпадает с родительской сеткой.cellHeight — высота ячеек, может
задаваться в пикселях или через auto.disableResize — отключает возможность
изменения размеров блоков внутри дочерней сетки.float — определяет, будут ли блоки
«плавать» при изменении размера.draggable.handle — позволяет назначить
конкретный элемент для захвата блока при перетаскивании, что особенно
полезно при вложенных сетках.Пример с настройкой обработчика перетаскивания:
const childGrid = GridStack.init({
column: 3,
draggable: {
handle: '.child-handle'
}
}, document.querySelector('.child-grid'));
Дочерние сетки генерируют собственные события, которые можно использовать для синхронизации с родительской сеткой или выполнения дополнительных действий:
change — вызывается при изменении
положения или размеров блоков.added / removed — события
добавления и удаления элементов.dragstart / dragstop —
перетаскивание элементов внутри дочерней сетки.Пример обработки события изменения:
childGrid.on('change', function(event, items) {
console.log('Дочерняя сетка изменилась:', items);
});
При работе с дочерними сетками важно правильно настраивать взаимодействие:
nested: true при
инициализации родительской сетки:const parentGrid = GridStack.init({nested: true});
update():childGrid.on('change', () => {
parentGrid.update();
});
acceptWidgets: false в родительской сетке.Дочерние сетки полностью поддерживают динамическое добавление и удаление элементов:
childGrid.addWidget({
x: 0,
y: 0,
width: 2,
height: 1,
content: '<div class="child-item">Новый блок</div>'
});
x, y — координаты блока в сетке.width, height — размеры в единицах
сетки.content — HTML-содержимое блока.Дочерние сетки могут иметь собственные стили, независимые от родительской сетки. Часто используют классы для ограничения размеров или задания уникального фона:
.child-grid {
border: 1px solid #ccc;
background-color: #f9f9f9;
padding: 5px;
}
.child-grid .grid-stack-item {
background-color: #e0f7fa;
}
padding и margin помогают избежать
наложений блоков.draggable.handle и
disableResize для контроля UX при множестве вложенных
сеток.Эта конфигурация дочерних сеток позволяет строить сложные многоуровневые интерфейсы с независимой управляемостью блоков, сохраняя при этом удобство перетаскивания и гибкость изменения размеров.