Muuri предоставляет мощный механизм для управления сеткой элементов с поддержкой drag-and-drop. Одним из ключевых аспектов UX является визуальная обратная связь при перетаскивании элементов. Стилизация активного элемента (drag-элемента) позволяет пользователю легко идентифицировать перемещаемый объект и улучшает восприятие интерактивности интерфейса.
При перетаскивании Muuri автоматически добавляет классы к элементу и его контейнеру:
muuri-item-dragging – применяется к элементу в момент
перетаскивания.muuri-item-releasing – применяется при отпускании
элемента до завершения анимации перемещения.Использование этих классов позволяет задавать визуальные эффекты без вмешательства в JS:
.muuri-item-dragging {
z-index: 1000; /* вывод на передний план */
box-shadow: 0 15px 25px rgba(0, 0, 0, 0.3); /* визуальная глубина */
transform: scale(1.05); /* лёгкое увеличение элемента */
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.muuri-item-releasing {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
Особенности использования:
z-index позволяет активному элементу не перекрываться
другими объектами.box-shadow и transform: scale усиливают
визуальное ощущение перетаскивания.transition) сглаживают появление и
исчезновение эффектов.Для более гибкой кастомизации Muuri позволяет использовать события сетки:
dragStart – срабатывает при начале перетаскивания.dragEnd – срабатывает при завершении
перетаскивания.Пример изменения стиля через JS:
const grid = new Muuri('.grid', {
dragEnabled: true
});
grid.on('dragStart', (item) => {
const element = item.getElement();
element.style.backgroundColor = '#f0f0f0';
element.style.border = '2px solid #3498db';
});
grid.on('dragEnd', (item) => {
const element = item.getElement();
element.style.backgroundColor = '';
element.style.border = '';
});
Преимущества подхода через JS:
dragReleaseDuration для анимации возвратаMuuri позволяет задавать длительность анимации возвращения элемента
на место через параметр dragReleaseDuration:
const grid = new Muuri('.grid', {
dragEnabled: true,
dragReleaseDuration: 400, // время в миллисекундах
dragReleaseEasing: 'ease-in-out'
});
muuri-item-releasing создаёт
плавный переход при отпускании элемента.Можно комбинировать классы и JS для создания уникальных визуальных эффектов на разных типах элементов:
grid.on('dragStart', (item) => {
const element = item.getElement();
if (element.classList.contains('priority')) {
element.style.boxShadow = '0 20px 40px rgba(231, 76, 60, 0.5)';
element.style.transform = 'scale(1.1)';
} else {
element.style.boxShadow = '0 10px 20px rgba(0, 0, 0, 0.3)';
element.style.transform = 'scale(1.05)';
}
});
Для создания более реалистичного эффекта drag полезно комбинировать несколько трансформаций:
.muuri-item-dragging {
transform: scale(1.05) rotate(-1deg);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.35);
transition: transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94),
box-shadow 0.2s ease;
}
rotate(-1deg) создаёт лёгкий наклон элемента, усиливая
ощущение движения.Muuri автоматически учитывает touch-события. Для стилизации
drag-элемента на мобильных устройствах применяются те же классы
muuri-item-dragging и muuri-item-releasing.
Можно добавлять медиа-запросы для оптимизации:
@media (max-width: 768px) {
.muuri-item-dragging {
box-shadow: 0 15px 30px rgba(0,0,0,0.25);
transform: scale(1.08);
}
}
Стилизация активного drag-элемента в Muuri достигается комбинацией CSS-классов, событий JS и параметров анимации. Ключевые моменты:
muuri-item-dragging и
muuri-item-releasing.dragReleaseDuration и
dragReleaseEasing для плавного возврата.Эти техники позволяют создавать удобный, визуально информативный интерфейс, где перемещаемые элементы чётко выделяются и создают приятный опыт взаимодействия.