Библиотека Muuri предоставляет мощный инструмент для создания динамических сеток с плавной анимацией. Одним из ключевых аспектов работы является управление layout animation, то есть анимацией перестановки элементов при изменении их положения или размеров. Понимание и правильная настройка параметров анимации позволяет создавать интерфейсы с высоким качеством визуального восприятия.
layoutМетод grid.layout и его аналог layout при
инициализации сетки принимают объект с параметрами анимации. Основные
ключи объекта:
duration Задает длительность
анимации в миллисекундах. По умолчанию 400. Пример:
grid.layout({ duration: 600 });easing Определяет функцию
сглаживания анимации. Поддерживаются стандартные CSS easing-функции:
ease, linear, ease-in,
ease-out, ease-in-out, а также cubic-bezier.
Пример использования cubic-bezier:
grid.layout({ easing: 'cubic-bezier(0.25, 0.1, 0.25, 1)' });fillGaps Булевый параметр,
указывающий, следует ли автоматически заполнять пустоты при перестановке
элементов. Значение по умолчанию: true. Пример:
grid.layout({ fillGaps: false });sort Определяет, нужно ли
сортировать элементы перед анимацией. Можно передать функцию сравнения
элементов или булевое значение true/false.
grid.layout({
sort: (a, b) => a.getElement().dataset.order - b.getElement().dataset.order
});Muuri позволяет гибко настраивать анимацию не только для всей сетки, но и для конкретных элементов. Основные свойства:
duration для элемента Можно указать
разное время анимации для отдельных элементов через
item.getElement().style.transitionDuration.
item.getElement().style.transitionDuration = '800ms';transform и opacity
Анимация элементов работает через CSS-свойства transform и
opacity. Изменение позиции, масштаба или прозрачности
элементов автоматически анимируется, если включен параметр
layout: { duration: … }.
layout
анимацииСлияние нескольких операций Если несколько
методов grid.add, grid.remove или
grid.sort вызываются последовательно, Muuri автоматически
объединяет анимации, чтобы избежать рывков.
Автоматическое измерение позиции Перед анимацией Muuri вычисляет текущие координаты элементов и координаты после применения изменений. Это обеспечивает корректное плавное перемещение.
События анимации
layoutStart — вызывается перед началом
анимации перестановки элементов.layoutEnd — вызывается после
завершения всех анимаций.grid.on('layoutStart', () => console.log('Анимация началась'));
grid.on('layoutEnd', () => console.log('Анимация завершена'));Параметры анимации можно задать при создании сетки через
new Muuri(container, options). Пример конфигурации:
const grid = new Muuri('.grid', {
layout: {
duration: 500,
easing: 'ease-in-out',
fillGaps: true,
sort: false
},
dragEnabled: true
});
Здесь:
duration управляет скоростью анимации всех
перестановок,easing отвечает за плавность движения,fillGaps предотвращает визуальные пустоты,sort отключает автоматическую сортировку.Если элементы добавляются, удаляются или изменяются динамически,
необходимо вызывать grid.layout() с параметрами анимации.
Это гарантирует, что все изменения будут визуально плавными.
grid.add(newItem, { layout: { duration: 600, easing: 'ease-out' } });
grid.remove(oldItem, { layout: { duration: 300, easing: 'linear' } });
grid.layout({ duration: 400, fillGaps: true });
Muuri автоматически определяет начальные и конечные позиции для каждого элемента и применяет CSS-переходы.
200–300ms) с ease-out.400–600ms с ease-in-out или
cubic-bezier.fillGaps: true обеспечивает аккуратный и компактный вид
сетки при удалении элементов.layoutStart и
layoutEnd позволяет синхронизировать внешние анимации или
действия с движением сетки.Настройка параметров layout animation в Muuri — это ключ
к плавным, отзывчивым и визуально привлекательным сеткам. Контроль
длительности, easing, сортировки и заполнения пустот обеспечивает полную
свободу при проектировании интерфейсов.