Библиотека Muuri предоставляет мощный и гибкий механизм для управления сетками элементов, включая функциональность drag and drop. В основе управления перетаскиванием лежит система событий, которые позволяют отслеживать весь процесс — от начала захвата элемента до его окончательного размещения.
Каждое событие имеет уникальный контекст и передает полезные данные через объект события, что позволяет точно контролировать поведение сетки и элементов.
dragStartСрабатывает в момент начала перетаскивания элемента.
Ключевые свойства события:
item — объект Muuri-элемента, который начали
перетаскивать.event — оригинальное событие браузера
(MouseEvent или TouchEvent).grid — ссылка на сетку Muuri, к которой принадлежит
элемент.Применение: Можно использовать для изменения
визуального состояния элемента, например, добавления класса
dragging или изменения стиля курсора.
grid.on('dragStart', ({ item, event }) => {
item.getElement().classList.add('dragging');
});
dragMoveСрабатывает при каждом изменении позиции элемента во время перетаскивания.
Ключевые свойства события:
x, y — текущие координаты элемента
относительно контейнера.deltaX, deltaY — смещение с момента начала
перетаскивания.item — элемент, который перетаскивается.Применение: Используется для динамического обновления интерфейса, например, подсветки зон, куда можно переместить элемент, или отображения предварительной позиции.
grid.on('dragMove', ({ x, y, item }) => {
console.log(`Элемент ${item.getElement().textContent} перемещается в (${x}, ${y})`);
});
dragEndСрабатывает в момент завершения перетаскивания элемента, до того как Muuri обновит сетку.
Ключевые свойства события:
item — перетаскиваемый элемент.grid — сетка, к которой элемент принадлежит.event — оригинальное событие браузера.Применение: Позволяет отменить перемещение или выполнить дополнительные действия перед фиксацией позиции, например, проверить допустимость новой позиции.
grid.on('dragEnd', ({ item }) => {
item.getElement().classList.remove('dragging');
});
dragReleaseStartСрабатывает, когда элемент отпускают, но сетка ещё не начала анимацию возврата или перемещения.
Ключевые свойства события:
item — элемент, который отпустили.grid — сетка Muuri.event — событие отпускания (mouseup или
touchend).Применение: Можно использовать для подготовки анимаций или визуальных эффектов до того, как элемент вернется на место.
grid.on('dragReleaseStart', ({ item }) => {
item.getElement().style.transition = 'transform 0.2s ease';
});
dragReleaseEndСрабатывает после завершения анимации возврата или перемещения элемента в новую позицию.
Ключевые свойства события:
item — элемент, который завершил перемещение.grid — сетка Muuri.succeeded — булево значение, показывающее, было ли
перемещение успешным.Применение: Позволяет завершить все визуальные эффекты, обновить данные состояния или запускать дополнительные действия, например, сохранение нового порядка элементов.
grid.on('dragReleaseEnd', ({ item, succeeded }) => {
if (succeeded) {
console.log(`Элемент ${item.getElement().textContent} успешно перемещен`);
}
});
Muuri поддерживает возможность перетаскивания элементов между разными
сетками. В этом случае события dragStart,
dragMove и dragEnd срабатывают отдельно для
каждой сетки, а события receive и send
позволяют отслеживать фактическую передачу элемента между сетками:
gridA.on('send', ({ item, toGrid }) => {
console.log(`Элемент отправлен в другую сетку`);
});
gridB.on('receive', ({ item, fromGrid }) => {
console.log(`Элемент получен из другой сетки`);
});
События drag and drop в Muuri позволяют тонко настраивать поведение:
dragAxis можно разрешить перетаскивание только по
горизонтали или вертикали.dragStart можно определять, какой элемент можно
перетаскивать.dragReleaseStart и dragReleaseEnd позволяет
создавать уникальные эффекты перемещения.Использовать dragStart для подготовки
элементов. Всегда добавляйте визуальные подсказки, чтобы
пользователь понимал, что элемент захвачен.
dragMove для интерактивного
отклика. Позволяет реализовать динамические подсказки и зоны
принятия элементов.
dragReleaseStart и
dragReleaseEnd для плавных анимаций. Управление
стилями и переходами делает перетаскивание более естественным.
Следить за успешностью перемещения. Событие
dragReleaseEnd предоставляет информацию о том, было ли
перемещение завершено успешно, что особенно важно при работе с сетками,
связанными с данными.
Эта система событий обеспечивает полный контроль над процессом drag and drop, позволяя создавать интерактивные, отзывчивые и визуально приятные интерфейсы с Muuri.