Gridstack.js предоставляет возможность создавать динамические, перетаскиваемые сетки с виджетами, которые можно изменять по размеру и позиционированию. Одной из ключевых особенностей является контроль компактности расположения элементов, в том числе вертикальная компактность, которая позволяет автоматически минимизировать пустые пространства между виджетами по вертикали.
Вертикальный компактный режим
(verticalCompact) определяет, как Gridstack управляет
размещением виджетов по вертикали. При включении этого режима элементы
будут «подтягиваться» вверх, чтобы занять доступное пространство,
избегая пустых промежутков, которые могут образоваться после перемещения
или удаления виджетов.
Основные принципы работы:
Подтягивание вверх Каждый виджет проверяет, есть ли свободное пространство над ним. Если оно существует, виджет автоматически смещается вверх до ближайшего занятого элемента или верхнего края сетки.
Не влияет на горизонтальное расположение Вертикальная компактность работает только по оси Y. X-позиции виджетов сохраняются без изменений, что позволяет создавать гибкие макеты с фиксированными колонками и динамической высотой.
Взаимодействие с drag-and-drop При перемещении виджета Gridstack динамически пересчитывает вертикальные позиции соседних элементов, обеспечивая, что пустоты устраняются сразу после отпускания элемента.
Вертикальный компактный режим включается через опции при инициализации сетки:
const grid = GridStack.init({
verticalCompact: true,
column: 12,
float: false,
});
Описание опций:
verticalCompact: true — активирует вертикальное
подтягивание элементов.float: false — предотвращает “плавающее” поведение
виджетов, что важно для корректного вертикального выравнивания.column — количество колонок в сетке; используется для
определения X-координат виджетов.Gridstack позволяет изменять режим работы сетки после инициализации.
Для включения или отключения вертикальной компактности используется
метод setOptions:
grid.setOptions({ verticalCompact: false }); // отключение вертикального подтягивания
grid.setOptions({ verticalCompact: true }); // включение снова
После изменения опций необходимо пересчитать позиции виджетов с
помощью метода compact:
grid.compact();
Это особенно полезно при динамическом добавлении или удалении элементов в реальном времени.
При добавлении нового элемента с помощью метода
addWidget вертикальная компактность автоматически
учитывается:
grid.addWidget({
x: 0,
y: 5,
width: 3,
height: 2,
content: '<div class="widget">Новый элемент</div>'
});
Если verticalCompact включён, Gridstack пересчитает
Y-позиции виджетов и подтянет новые элементы вверх до ближайшего
возможного места.
Многоколоночные сетки Вертикальная компактность работает независимо для каждой колонки. Виджеты подтягиваются вверх только в пределах своей колонки, сохраняя горизонтальный порядок.
Элементы с разной высотой Gridstack корректно обрабатывает виджеты с различной высотой, предотвращая перекрытия и обеспечивая плотное вертикальное расположение.
Удаление виджетов После удаления элемента соседние виджеты автоматически подтягиваются вверх, исключая пустые строки.
const widget = grid.getWidget(el);
grid.removeWidget(widget);
grid.compact();
column) и
отключить плавающее поведение (float: false).grid.compact() после каждого изменения,
чтобы избежать временных пустот.Вертикальный компактный режим в Gridstack.js обеспечивает эффективное использование пространства, автоматизируя вертикальное выравнивание виджетов и поддерживая динамическую, отзывчивую сетку. Это особенно важно для дашбордов, панелей управления и интерфейсов с большим количеством интерактивных элементов.