Библиотека Muuri предоставляет мощный механизм работы с пользовательскими событиями, позволяющий отслеживать и реагировать на взаимодействия с сеткой, элементами и их состояниями. Пользовательские события в Muuri можно разделить на несколько категорий: события сетки, события элементов и события перемещения (drag-and-drop).
События в Muuri регистрируются через метод
.on(eventName, callback) объекта сетки. Пример базового
синтаксиса:
const grid = new Muuri('.grid');
grid.on('add', function (items) {
console.log('Элементы добавлены:', items);
});
eventName — имя события.callback — функция, которая вызывается
при срабатывании события. Аргументы callback зависят от типа
события.Метод .off(eventName, callback) используется для
удаления обработчиков.
add — срабатывает при добавлении
новых элементов в сетку. Аргументы: массив добавленных элементов.
Позволяет сразу применить стили или анимации к новым элементам.
remove — возникает при удалении
элементов. Аргументы: массив удалённых элементов. Часто используется для
обновления данных или синхронизации с внешними источниками.
layoutStart и
layoutEnd — события начала и окончания
перестроения сетки. Позволяют управлять визуальными эффектами, например,
отображением индикатора загрузки или выполнением анимаций.
sort — срабатывает при сортировке
элементов. Аргументы: массив отсортированных элементов. Удобно для
логирования или синхронизации внешнего состояния интерфейса с положением
элементов.
Каждый элемент Muuri является объектом с собственными событиями. Для
их регистрации используется метод .on на объекте
элемента:
const item = grid.getItems()[0];
item.on('show', function () {
console.log('Элемент показан');
});
item.on('hide', function () {
console.log('Элемент скрыт');
});
show и
hide — события изменения видимости
элемента.move — срабатывает при перемещении
элемента внутри сетки.dragStart, dragMove,
dragEnd — события, связанные с перетаскиванием
элемента.Muuri поддерживает систему drag-and-drop с расширенной возможностью управления:
grid.on('dragStart', function (item) {
item.getElement().style.opacity = 0.5;
});
grid.on('dragEnd', function (item) {
item.getElement().style.opacity = 1;
});
dragStart — начинается перетаскивание
элемента.dragMove — вызывается при каждом
изменении позиции элемента во время перетаскивания.dragEnd — завершается перетаскивание,
можно обновить положение в данных.Опция dragEnabled позволяет включать или отключать
возможность перетаскивания:
const grid = new Muuri('.grid', {
dragEnabled: true
});
Muuri позволяет создавать собственные события для сетки или элементов
с помощью метода .emit(eventName, data). Пример для
сетки:
grid.emit('customEvent', { message: 'Событие произошло' });
grid.on('customEvent', function (data) {
console.log(data.message);
});
Для элементов:
const item = grid.getItems()[0];
item.emit('highlight', { color: 'red' });
item.on('highlight', function (data) {
item.getElement().style.backgroundColor = data.color;
});
Создание пользовательских событий особенно полезно при интеграции сетки с другими библиотеками или при необходимости оповещения внешнего кода о внутренних изменениях.
Обратные вызовы в Muuri могут получать следующие аргументы:
items — массив объектов элементов, для
событий добавления, удаления или сортировки.item — объект элемента, для событий
перетаскивания или изменения состояния.layout — объект с информацией о
текущем расположении элементов, для событий layoutStart и
layoutEnd.data — пользовательские данные для
кастомных событий, передаваемые через emit.dragMove с
помощью requestAnimationFrame или
throttle.Система событий Muuri позволяет гибко управлять всеми аспектами сетки и её элементов. Комбинация стандартных и пользовательских событий открывает возможности для создания динамичных, интерактивных интерфейсов с высоким уровнем контроля над поведением элементов и анимациями.