Muuri — это мощная библиотека для создания динамических сеток с поддержкой перетаскивания, фильтрации и сортировки элементов. Одной из ключевых возможностей является гибкая настройка анимаций, которая позволяет реализовать плавные переходы при добавлении, удалении, перемещении и сортировке элементов. Анимации в Muuri можно полностью контролировать через CSS, что даёт возможность создавать уникальные визуальные эффекты без изменения логики JavaScript.
Muuri применяет к элементам сетки собственные классы при изменении их состояния. Основные из них:
.muuri-item — базовый класс для всех элементов
сетки..muuri-item-moving — применяется к элементу во время
перемещения или анимации..muuri-item-hidden — указывает, что элемент скрыт..muuri-item-releasing — активен в момент завершения
перетаскивания..muuri-item-dragging — активен при активном
перетаскивании.С помощью этих классов можно задавать transition, transform, opacity и другие свойства для создания уникальных анимационных эффектов.
Пример базовой анимации перемещения:
.muuri-item {
transition: transform 0.4s ease, opacity 0.4s ease;
}
.muuri-item-hidden {
opacity: 0;
pointer-events: none;
}
В этом примере все элементы сетки плавно перемещаются при смене позиции, а скрытые элементы постепенно исчезают, сохраняя плавность интерфейса.
Для кастомной анимации добавления и удаления элементов можно
использовать комбинацию классов .muuri-item и
.muuri-item-hidden. Например:
.muuri-item {
transition: transform 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55), opacity 0.5s ease;
}
.muuri-item-hidden {
opacity: 0;
transform: scale(0.8) rotate(-10deg);
}
В этом примере при скрытии элемента он уменьшается и слегка поворачивается, создавая эффект “выцветания” и ухода элемента с сетки. Обратное появление элемента автоматически будет анимироваться в обратной последовательности благодаря плавным переходам CSS.
Muuri предоставляет встроенный drag-and-drop, который можно
кастомизировать через CSS. Основной класс для перетаскиваемого элемента
— .muuri-item-dragging. К нему можно применять эффекты,
чтобы выделять перетаскиваемый элемент:
.muuri-item-dragging {
z-index: 1000;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
transform: scale(1.05);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
Эта анимация придаёт ощущение, что элемент “вырывается” из сетки и
становится активным объектом. При отпускании элемента Muuri
автоматически убирает класс .muuri-item-dragging и элемент
возвращается к своей позиции с плавным переходом.
CSS-переходы в Muuri можно улучшать с помощью разных кривых ускорения (easing) и transition-delay, чтобы создавать более сложные и органичные эффекты:
.muuri-item {
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.6s ease-in-out;
}
.muuri-item-moving {
transition-delay: 0.05s;
}
Кривая cubic-bezier позволяет полностью контролировать
скорость анимации в начале и конце движения, а
transition-delay создаёт эффект последовательного смещения
элементов при фильтрации или сортировке сетки.
При сортировке или фильтрации элементов Muuri динамически изменяет
позиции с помощью transform: translate(...). Кастомизация
этих переходов через CSS позволяет создавать живые сетки с
органичными перемещениями элементов. Например:
.muuri-item {
transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), opacity 0.5s ease;
}
.muuri-item-hidden {
opacity: 0;
transform: scale(0.9);
}
Эти настройки обеспечивают плавный и аккуратный эффект перемещения, а скрытые элементы уменьшаются и исчезают без резких скачков.
Класс .muuri-item-releasing используется для создания
финального эффекта после завершения перетаскивания:
.muuri-item-releasing {
transition: transform 0.4s ease, box-shadow 0.4s ease;
box-shadow: none;
transform: scale(1);
}
Эта анимация позволяет элементу плавно вернуться в сетку после того, как его отпустили, создавая эффект “поглощения” сеткой и сглаживая визуальный переход.
Muuri позволяет добавлять свои CSS-классы к элементам и комбинировать их с базовыми. Например, можно создать тему с выделенными элементами:
.muuri-item.highlight {
border: 2px solid #ff5722;
transform: scale(1.1);
transition: transform 0.3s ease, border-color 0.3s ease;
}
Сочетание этих пользовательских классов с анимациями Muuri позволяет создавать динамические и интерактивные сетки, где каждый элемент реагирует на действия пользователя с уникальными эффектами.
Использование CSS для анимаций в Muuri открывает полный контроль над поведением элементов сетки без необходимости вмешательства в JavaScript-логику. Основные принципы:
.muuri-item и
состояния .muuri-item-moving,
.muuri-item-hidden, .muuri-item-dragging,
.muuri-item-releasing.transform, opacity,
transition и box-shadow являются ключевыми для
создания визуальных эффектов.cubic-bezier,
transition-delay) помогают сделать движение элементов более
живым.Эти подходы делают Muuri гибкой платформой для реализации сложных и эстетически привлекательных интерфейсов на основе сеток с анимацией.