В библиотеке Muuri события играют ключевую роль в управлении поведением сетки. С помощью событий можно отслеживать изменения, взаимодействовать с элементами и динамически реагировать на действия пользователя. Все события делятся на несколько категорий: события сетки, события элементов и пользовательские события.
События сетки относятся ко всей коллекции элементов и позволяют реагировать на глобальные изменения. Ключевые события:
layoutStart – срабатывает перед
началом перестановки элементов. Используется для инициализации анимаций
или логики перед обновлением расположения.
grid.on('layoutStart', () => {
console.log('Начало перестановки элементов');
});layoutEnd – срабатывает после
завершения перестановки. Позволяет выполнять действия, когда элементы
уже находятся на новых позициях.
grid.on('layoutEnd', () => {
console.log('Перестановка завершена');
});add – возникает при добавлении
новых элементов в сетку. Передает объект элемента и его индекс.
grid.on('add', (items) => {
console.log('Добавлены элементы:', items);
});remove – событие удаления
элементов. Позволяет корректно обрабатывать удаление и освобождать
ресурсы.
grid.on('remove', (items) => {
console.log('Удалены элементы:', items);
});filter – срабатывает при применении
фильтра к сетке. Позволяет отслеживать, какие элементы стали
видимыми.
grid.on('filter', (items) => {
console.log('Элементы после фильтрации:', items);
});sort – возникает при сортировке
элементов. Позволяет реагировать на изменение порядка.
grid.on('sort', (items) => {
console.log('Элементы после сортировки:', items);
});dragStart, dragMove,
dragEnd – события, связанные с перетаскиванием.
Позволяют управлять логикой начала, движения и завершения перетаскивания
элементов.
grid.on('dragStart', (item) => {
console.log('Начало перетаскивания элемента:', item);
});Каждый элемент Muuri может генерировать свои собственные события. Основные:
show – элемент стал видимым после
фильтрации или анимации.hide – элемент скрыт.move – элемент перемещается в новую
позицию.dragReleaseEnd – завершено отпускание
элемента после перетаскивания.Эти события позволяют реализовать точечные эффекты и динамическое взаимодействие с конкретными элементами сетки.
item.on('show', () => {
console.log('Элемент показан');
});
Muuri поддерживает генерацию и обработку собственных событий через
метод emit. Это удобно для объединения
логики или передачи информации между частями приложения.
grid.emit('customEvent', { message: 'Пользовательское событие' });
grid.on('customEvent', (data) => {
console.log(data.message);
});
.on(eventName, callback) позволяет подключить
обработчик..once(eventName, callback) выполнит обработчик только один
раз..off(eventName, callback) удаляет обработчик.Пример комбинации подписки и отписки:
function handleDragEnd(item) {
console.log('Перетаскивание завершено:', item);
}
grid.on('dragEnd', handleDragEnd);
grid.off('dragEnd', handleDragEnd);
Muuri позволяет передавать объект с дополнительными данными в обработчик, что облегчает интеграцию с другими компонентами:
grid.on('layoutEnd', (items, status) => {
console.log('Количество элементов:', items.length);
console.log('Статус перестановки:', status);
});
Структура данных зависит от типа события и может содержать элементы, индексы, позиции и состояние перетаскивания.
dragStart, dragMove и
dragEnd.Система событий Muuri обеспечивает гибкий и мощный инструмент для управления поведением сетки и элементов, позволяя создавать интерактивные интерфейсы с минимальными затратами кода.