Gridstack.js предоставляет мощные возможности для создания интерактивных и динамически изменяемых сеток, однако при работе с мобильными устройствами и маленькими экранами часто требуется ограничить определённые функции для улучшения пользовательского опыта и производительности. В данной части рассматривается детальная настройка поведения сетки Gridstack.js в зависимости от размера экрана.
На устройствах с маленькими экранами перетаскивание виджетов и их
масштабирование может быть неудобным или нарушать отображение контента.
Gridstack.js позволяет отключать эти возможности с помощью опций
draggable и
resizable:
const grid = GridStack.init({
draggable: {
handle: '.grid-stack-item-content',
enabled: window.innerWidth > 768 // только на экранах шире 768px
},
resizable: {
handles: 'all',
enabled: window.innerWidth > 768
}
});
draggable.enabled — включает или
выключает возможность перемещения блоков.resizable.enabled — контролирует
возможность изменения размера блоков.window.innerWidth > 768
позволяет автоматически отключать интерактивные возможности на
смартфонах и небольших планшетах.Gridstack.js поддерживает обновление параметров сетки после её инициализации. Это позволяет динамически адаптировать поведение сетки при изменении ширины экрана:
window.addEventListener('resize', () => {
const enableInteraction = window.innerWidth > 768;
grid.enableMove(enableInteraction);
grid.enableResize(enableInteraction);
});
grid.enableMove(true|false) —
активирует или деактивирует перетаскивание.grid.enableResize(true|false) —
активирует или деактивирует изменение размера.resize обеспечивает плавную
адаптацию без перезагрузки страницы.Для отключения определённых функций можно использовать CSS вместе с
Gridstack.js. Например, блоки можно сделать
неперетаскиваемыми на мобильных устройствах, используя
класс .no-drag:
@media (max-width: 768px) {
.grid-stack-item.no-drag {
pointer-events: none;
}
}
Затем при инициализации Gridstack.js блоки с этим классом будут исключены из интерактивных операций:
grid.makeStatic(true); // перевод всех блоков в статический режим
makeStatic(true) — делает все элементы
статичными, отключая drag & drop и ресайз.grid.getGridItems().forEach(item => { ... });Gridstack.js позволяет отключать интерактивность не только глобально, но и на уровне отдельных элементов. Это особенно полезно при комбинировании больших и малых блоков на адаптивной сетке:
const item = document.querySelector('.grid-stack-item');
grid.update(item, { noMove: window.innerWidth <= 768, noResize: window.innerWidth <= 768 });
noMove — блок не может
перемещаться.noResize — блок не может изменять
размер.На малых экранах иногда полезнее полностью отключить сетку и показать
виджеты в один ряд. Gridstack.js поддерживает метод
compact(), который упрощает сетку:
if (window.innerWidth <= 480) {
grid.compact(); // уплотнение сетки без изменения структуры блоков
grid.disable(); // полностью отключает интерактивность
} else {
grid.enable(); // восстановление интерактивности на больших экранах
}
compact() — автоматически
перестраивает сетку, минимизируя пустое пространство.disable() и
enable() — управляют глобальным режимом
сетки.window.innerWidth и
window.matchMedia можно использовать для создания
breakpoint-логики, аналогичной CSS.makeStatic или
disable события drag & drop больше не вызываются. Для
восстановления интерактивности необходимо использовать соответствующие
методы enable, enableMove,
enableResize.Эта стратегия управления функционалом Gridstack.js на малых экранах позволяет создавать сетки, которые остаются информативными, удобными и производительными на любых устройствах, сохраняя при этом интерактивность там, где это действительно необходимо.