В библиотеке Muuri события играют ключевую роль в управлении динамическими сетками. Логирование событий позволяет отслеживать изменения состояния элементов, операций сортировки, фильтрации, перемещений и анимаций. Это особенно важно при разработке сложных интерактивных интерфейсов, где требуется точная диагностика поведения сетки.
Для работы с событиями используется метод
.on(eventName, callback). Он позволяет подписаться на
конкретное событие и выполнить обработчик при его возникновении:
const grid = new Muuri('.grid');
grid.on('add', function(items) {
console.log('Добавлены элементы:', items);
});
grid.on('remove', function(items) {
console.log('Удалены элементы:', items);
});
eventName — строка с названием
события.callback — функция, которая будет
вызвана при срабатывании события. Параметры функции зависят от типа
события.Метод .off(eventName, callback) используется для отписки
от события, что предотвращает утечки памяти и позволяет динамически
менять обработчики.
Muuri предоставляет несколько категорий событий, каждую из которых можно логировать.
Добавление и удаление элементов
add — вызывается после добавления элементов в
сетку.remove — вызывается после удаления элементов.grid.on('add', function(items) {
items.forEach(item => console.log('Элемент добавлен:', item.getElement()));
});
Перемещение элементов
move — срабатывает при изменении позиции элемента.layoutStart и layoutEnd — уведомляют о
начале и завершении перестройки сетки.grid.on('move', function(item, event) {
console.log('Элемент перемещён:', item.getElement());
});
Фильтрация и сортировка
filter — вызывается при фильтрации элементов.sort — вызывается при сортировке элементов.grid.on('filter', function(items) {
console.log('Элементы после фильтрации:', items);
});
События перетаскивания (Drag)
dragStart, dragReleaseStart,
dragReleaseEnd, dragEnd — предоставляют
детальную информацию о перетаскивании элементов сетки.grid.on('dragStart', function(item) {
console.log('Начато перетаскивание:', item.getElement());
});
Для комплексного анализа состояния сетки удобно объединять события и вести централизованный журнал:
const logEvent = (eventName) => (item, ...args) => {
console.log(`[${eventName}] Элемент:`, item.getElement(), 'Дополнительно:', args);
};
grid.on('add', logEvent('add'));
grid.on('remove', logEvent('remove'));
grid.on('move', logEvent('move'));
grid.on('filter', logEvent('filter'));
grid.on('sort', logEvent('sort'));
grid.on('dragStart', logEvent('dragStart'));
grid.on('dragEnd', logEvent('dragEnd'));
Такой подход упрощает мониторинг всех изменений сетки и позволяет легко расширять логирование под новые события без дублирования кода.
Метод getItems() возвращает массив всех элементов сетки,
а getElement() позволяет получить конкретный DOM-элемент.
Для подробного логирования можно выводить свойства элементов:
grid.getItems().forEach(item => {
console.log('ID:', item.getElement().dataset.id);
console.log('Текущее положение:', item.getPosition());
console.log('Видимость:', item.isVisible());
});
getPosition() — возвращает объект с
координатами { x, y }.isVisible() — проверяет, отображается
ли элемент после фильтрации.Muuri поддерживает анимацию элементов при изменении положения, добавлении и удалении. Можно отслеживать завершение анимаций с помощью событий:
layoutEnd — вызывается после завершения перестройки
сетки.dragReleaseEnd — уведомляет о завершении анимации после
отпускания элемента.grid.on('layoutEnd', function(items) {
console.log('Перестройка сетки завершена для элементов:', items);
});
Для отслеживания всех этапов анимации полезно объединять события
layoutStart, layoutEnd,
dragReleaseStart, dragReleaseEnd.
eventName
для всех событий позволяет легко масштабировать систему
логирования.Логирование событий в Muuri обеспечивает полный контроль над динамикой сетки, позволяет выявлять ошибки и оптимизировать пользовательский интерфейс в реальном времени.