Режимы работы сетки

Gridstack.js предоставляет гибкую систему для создания динамических сеток с возможностью перетаскивания и изменения размеров виджетов. Режимы работы сетки определяют поведение элементов и взаимодействие пользователя с ними. Понимание этих режимов критично для построения интерфейсов, где важна как адаптивность, так и контроль над расположением элементов.


Статический режим (Static Mode)

Описание: В статическом режиме сетка перестаёт быть интерактивной. Пользователи не могут перемещать или изменять размер виджетов. Этот режим используется для отображения готовых раскладок без возможности редактирования.

Применение:

  • Отображение результатов после настройки.
  • Ограничение возможности модификации пользователями.
  • Снижение нагрузки на браузер при большом количестве элементов.

Пример инициализации:

const grid = GridStack.init({
  staticGrid: true
});

Ключевые моменты:

  • staticGrid: true отключает drag&drop и ресайзинг.
  • Виджеты остаются полностью видимыми и сохраняют свои позиции.

Динамический режим (Dynamic Mode)

Описание: Динамический режим позволяет пользователям свободно перемещать виджеты и изменять их размеры. Этот режим является стандартным для интерактивных панелей и редакторов интерфейсов.

Возможности:

  • Drag & drop элементов внутри сетки.
  • Изменение ширины и высоты виджетов.
  • Автоматическая перестройка сетки при изменении размеров соседних элементов.

Пример инициализации:

const grid = GridStack.init({
  float: true, // Элементы могут "плавать" над другими
  resizable: { handles: 'all' } // Разрешает изменение размеров со всех сторон
});

Ключевые моменты:

  • float: true позволяет элементам свободно занимать любое место без строгой привязки к сетке.
  • Можно включить/отключить ресайзинг через объект resizable.
  • Поддерживаются события dragstart, dragstop, resizestart, resizestop для кастомной логики.

Режим перетаскивания (Drag-only Mode)

Описание: В этом режиме элементы сетки можно только перемещать, изменение размеров отключено. Подходит для интерфейсов, где важно фиксированное масштабирование виджетов, но требуется перестановка.

Пример настройки:

const grid = GridStack.init({
  disableResize: true, // Отключает изменение размеров
  draggable: { handle: '.grid-stack-item-content' } // Ограничение области перетаскивания
});

Особенности:

  • disableResize: true блокирует изменение ширины и высоты.
  • draggable позволяет настроить конкретные зоны, с которых можно захватывать виджеты.

Режим адаптивной сетки (Responsive Mode)

Описание: Gridstack.js поддерживает адаптивность через опции, позволяющие изменять поведение сетки при изменении ширины окна. Элементы могут автоматически перестраиваться в несколько колонок или строк в зависимости от устройства.

Пример конфигурации:

const grid = GridStack.init({
  column: 12,
  minRow: 1,
  float: true,
  disableOneColumnMode: false // Включает автоматический переход в одноколоночный режим на узких экранах
});

Ключевые моменты:

  • Свойство disableOneColumnMode управляет автоматическим сворачиванием сетки.
  • Можно задавать различные параметры колонок и размеров для разных брейкпоинтов.
  • Идеально для мобильных панелей и админских интерфейсов.

Комбинированные режимы и кастомизация

Gridstack.js позволяет сочетать режимы, создавая гибкие комбинации:

  • Статический + адаптивный: отображение готовой раскладки, которая подстраивается под размер экрана.
  • Динамический + адаптивный: пользователь может менять расположение элементов, а сетка корректно реагирует на изменение ширины окна.
  • Drag-only + адаптивный: фиксированные размеры виджетов с возможностью их перемещения, подстраиваясь под разные устройства.

Пример комплексной настройки:

const grid = GridStack.init({
  staticGrid: false,
  float: true,
  disableResize: true,
  column: 12,
  disableOneColumnMode: false
});

Рекомендации по применению:

  • Всегда уточнять, какой уровень интерактивности нужен пользователю.
  • Для больших панелей рекомендуется включать адаптивность и отключать плавание элементов (float: false), чтобы избежать перекрытия.
  • Комбинирование режимов даёт полный контроль над UX без изменения исходного кода виджетов.

Управление режимами через API

Gridstack.js предоставляет методы для динамического переключения режимов после инициализации:

// Переключение в статический режим
grid.enableMove(false);
grid.enableResize(false);

// Включение динамического режима
grid.enableMove(true);
grid.enableResize(true);

Пояснения:

  • enableMove(flag) управляет возможностью перетаскивания.
  • enableResize(flag) управляет возможностью изменения размеров.
  • Такие методы полезны для интерфейсов, где интерактивность включается только при определённых действиях пользователя.

Взаимодействие с событиями

Каждый режим работы тесно связан с событиями сетки:

  • dragstart / dragstop – фиксирование начала и конца перемещения.
  • resizestart / resizestop – отслеживание изменений размеров.
  • change – общий сигнал о любом изменении элементов сетки.

Использование событий позволяет реализовать логику, специфичную для каждого режима: блокировка определённых зон, сохранение конфигурации в базе данных, автоматическая перестройка элементов.


Режимы работы сетки в Gridstack.js обеспечивают полную гибкость при построении адаптивных и интерактивных интерфейсов. Правильное сочетание статических, динамических, drag-only и адаптивных режимов позволяет создавать панели, оптимизированные под любые требования пользователя.