Gridstack.js предоставляет гибкие возможности для управления анимацией элементов сетки, включая их перемещение, изменение размера и визуальные эффекты появления или исчезновения. Анимация в Gridstack.js реализуется через CSS-переходы, которые активируются при изменении размеров или позиции виджетов. Это позволяет добиться плавного и отзывчивого интерфейса без необходимости вручную управлять кадрами анимации.
Gridstack.js по умолчанию поддерживает анимацию drag & drop и resizable, но при необходимости разработчик может управлять скоростью, временными функциями и задержкой через встроенные методы и настройки.
Gridstack.js позволяет динамически управлять анимацией через методы:
grid.enableMove(true); // Разрешает перемещение
grid.enableResize(true); // Разрешает изменение размера
Для отключения анимации используется CSS-класс
.no-transition или метод setOptions:
grid.setOptions({ animate: false });
Эта настройка особенно полезна при массовом обновлении сетки, чтобы избежать “подергивания” интерфейса.
Gridstack.js предоставляет несколько методов для контроля анимации на уровне отдельных виджетов и всей сетки:
moveWidget(el, x, y, autoSize, duration)Позволяет переместить виджет на новые координаты (x, y)
с возможностью указать длительность анимации.
grid.moveWidget(el, 2, 3, true, 300); // Перемещение с анимацией 300ms
el – DOM-элемент виджета или его jQuery-объект.x, y – новые координаты сетки.autoSize – логический флаг, автоматически подбирает
размеры, если необходимо.duration – длительность анимации в миллисекундах.resizeWidget(el, width, height, duration)Изменяет размеры виджета с анимацией:
grid.resizeWidget(el, 4, 2, 250);
width, height – новые размеры в ячейках
сетки.duration – задает скорость анимации.Этот метод используется для создания динамически изменяемых панелей или карточек, где визуальный эффект изменения размера критичен для UX.
batchUpdate() / commit()Позволяет объединять несколько операций изменения виджетов в одну
транзакцию. Анимация применяется после commit():
grid.batchUpdate();
grid.moveWidget(el1, 1, 1);
grid.resizeWidget(el2, 3, 2);
grid.commit();
Преимущества:
Gridstack.js использует CSS-переходы для
transform и width/height. Для тонкой
настройки можно использовать кастомные классы:
.grid-stack-item {
transition: transform 0.3s ease-in-out, width 0.3s ease-in-out, height 0.3s ease-in-out;
}
.grid-stack-item.no-transition {
transition: none !important;
}
ease-in-out – плавное начало и конец анимации.0.3s – длительность перехода..no-transition отключает анимацию для отдельных
виджетов.Применение CSS-классов совместно с методами moveWidget и
resizeWidget дает полный контроль над визуальными
эффектами.
Иногда требуется включать анимацию только для определенных событий:
function animateWidget(el, newX, newY) {
el.classList.remove('no-transition');
grid.moveWidget(el, newX, newY, true, 200);
setTimeout(() => el.classList.add('no-transition'), 200);
}
Этот подход позволяет избежать анимации при начальной загрузке сетки и включать ее только при пользовательских действиях.
Gridstack.js поддерживает плавное появление и исчезновение элементов:
grid.addWidget('<div class="grid-stack-item">Новая панель</div>', {x:0, y:0, w:2, h:2});
Для анимации появления можно использовать CSS:
.grid-stack-item {
opacity: 0;
transform: scale(0.8);
transition: opacity 0.3s, transform 0.3s;
}
.grid-stack-item.ui-added {
opacity: 1;
transform: scale(1);
}
.ui-added добавляется после вставки виджета через
JS.Удаление виджета с анимацией:
function removeWidget(el) {
el.style.transition = 'opacity 0.3s';
el.style.opacity = '0';
setTimeout(() => grid.removeWidget(el), 300);
}
duration в
методах moveWidget и resizeWidget для
согласованного UX..ui-added и плавное появление через CSS.Эти методы дают полный контроль над визуальными эффектами и позволяют создавать гибкие, отзывчивые и динамичные интерфейсы с использованием Gridstack.js.