Muuri предоставляет гибкую систему перетаскивания элементов сетки,
позволяя точно контролировать поведение draggable-элементов. Настройка
параметров dragging осуществляется через объект
конфигурации при инициализации сетки или при динамическом
включении/отключении перетаскивания.
Для активации перетаскивания используется параметр:
dragEnabled: true
По умолчанию dragEnabled установлен в true,
что делает все элементы сетки перетаскиваемыми. Для отключения можно
использовать:
grid.updateOptions({ dragEnabled: false });
или при инициализации:
const grid = new Muuri('.grid', {
dragEnabled: false
});
Muuri позволяет ограничить направление перетаскивания через
dragAxis. Возможные значения:
'x' – только горизонтальное перетаскивание.'y' – только вертикальное.'xy' – свободное перемещение по обоим осям.Пример:
const grid = new Muuri('.grid', {
dragEnabled: true,
dragAxis: 'y'
});
dragStartPredicate – функция или объект, определяющий
условия начала перетаскивания. Например, можно задавать задержку перед
началом перетаскивания или учитывать только определённые элементы внутри
карточки.const grid = new Muuri('.grid', {
dragEnabled: true,
dragStartPredicate: {
distance: 10, // Начало после перемещения на 10px
delay: 100 // Задержка 100 мс
}
});
distance контролирует минимальное смещение курсора до
начала перетаскивания.delay задаёт временной интервал удержания элемента
перед активацией drag.Можно также использовать кастомную функцию:
dragStartPredicate: function (item, event) {
return event.target.classList.contains('drag-handle');
}
Muuri предоставляет набор событий, связанных с перетаскиванием:
dragStart – триггерится при начале перемещения.dragMove – срабатывает при каждом шаге движения.dragEnd – событие завершения перетаскивания.dragReleaseStart и dragReleaseEnd – для
обработки момента, когда элемент отпускается и возвращается на своё
место.Пример использования событий:
grid.on('dragStart', function (item) {
item.getElement().style.opacity = '0.5';
});
grid.on('dragEnd', function (item) {
item.getElement().style.opacity = '1';
});
Для более точного управления можно указать конкретный элемент внутри карточки, с которого разрешено перетаскивание:
dragStartPredicate: {
handle: '.drag-handle'
}
Это особенно полезно для карточек с интерактивными элементами, где весь блок нельзя перемещать без влияния на кнопки или ссылки.
Muuri позволяет ограничить движение элементов и автоматически прокручивать контейнер:
dragSort: true или массив контейнеров, в
которых можно перемещать элемент.dragSortHeuristics: объект с параметрами для
оптимизации сортировки и визуальной реакции.dragSort: true,
dragSortHeuristics: {
sortInterval: 50,
minDragDistance: 10,
minBounceBackAngle: 1
}
sortInterval – частота проверки позиции для
сортировки.minDragDistance – минимальное расстояние до активации
перестановки.minBounceBackAngle – минимальный угол для отката
элемента при столкновении.Muuri поддерживает плавное возвращение и перемещение элементов:
dragReleaseDuration: 400,
dragReleaseEasing: 'ease'
dragReleaseDuration – продолжительность анимации
возврата в миллисекундах.dragReleaseEasing – тип easing, который определяет
стиль анимации (например, 'ease', 'linear',
'ease-in-out').Все параметры перетаскивания можно изменять на лету через метод
updateOptions:
grid.updateOptions({
dragEnabled: true,
dragAxis: 'x'
});
Это позволяет создавать адаптивные интерфейсы, где перетаскивание включается только при определённых условиях или разрешениях пользователя.
dragStart,
dragMove, dragEnd для кастомного
поведения.Эти настройки делают Muuri мощным инструментом для реализации интерактивных сеток с точным контролем перетаскивания и анимации элементов.