Библиотека Muuri реализует гибкую систему управления
сеткой элементов через объект Grid. Каждый экземпляр
Grid проходит ряд стадий жизненного цикла, сопровождаемых
событиями, которые позволяют отслеживать изменения состояния и управлять
поведением элементов на странице. События жизненного цикла делятся на
несколько категорий: инициализация, обновление
и сортировка, перемещение элементов,
добавление и удаление элементов, а также
завершение анимаций.
При создании нового объекта Grid запускаются события,
связанные с начальной конфигурацией:
beforeSend – срабатывает перед
отправкой элементов на обработку библиотекой. Позволяет подготовить
данные или изменить DOM перед тем, как Muuri начнёт работу.ready – ключевое событие,
сигнализирующее, что сетка полностью инициализирована, элементы
размещены и можно безопасно взаимодействовать с Grid. На
этом этапе доступны методы сортировки, фильтрации и манипуляции с
элементами.Пример привязки события:
const grid = new Muuri('.grid', {
dragEnabled: true
});
grid.on('ready', () => {
console.log('Grid инициализирован и готов к работе');
});
Muuri позволяет динамически изменять содержимое сетки, что сопровождается событиями жизненного цикла элементов:
add – вызывается после добавления
новых элементов через метод add(). Позволяет выполнить
анимации или другие действия над только что добавленными
элементами.remove – срабатывает после удаления
элементов через метод remove(). Можно использовать для
очистки связанных данных или удаления обработчиков событий.send – происходит при перемещении
элементов между сетками (send()), когда элементы покидают
одну сетку и добавляются в другую.Пример:
grid.on('add', (items) => {
items.forEach(item => item.getElement().classList.add('highlight'));
});
Изменение порядка и видимости элементов вызывает специальные события:
sort – срабатывает после вызова
sort() на Grid. Можно использовать для
синхронизации UI или сохранения состояния сортировки.filter – возникает после применения
метода filter(), который изменяет видимость элементов в
сетке. Часто используется для динамических интерфейсов с категориями или
тегами.Пример отслеживания сортировки:
grid.on('sort', () => {
console.log('Элементы отсортированы');
});
Одним из ключевых преимуществ Muuri является возможность
перетаскивания элементов (drag). События
жизненного цикла для перемещения:
dragStart – вызывается в момент начала
перетаскивания элемента.dragMove – срабатывает при каждом
обновлении позиции элемента во время перетаскивания.dragEnd – фиксирует завершение
перетаскивания и возвращение элемента в сетку.dragReleaseStart и
dragReleaseEnd – контролируют анимацию
возврата элемента в сетку после отпускания.Эти события дают возможность добавлять пользовательские эффекты, например, тени, изменение размера или изменение других элементов сетки в процессе перетаскивания.
Пример:
grid.on('dragStart', (item) => {
item.getElement().classList.add('dragging');
});
grid.on('dragEnd', (item) => {
item.getElement().classList.remove('dragging');
});
Muuri использует анимации для плавного перемещения элементов. События жизненного цикла анимаций позволяют отслеживать состояние элементов после завершения их анимационных действий:
layoutStart – срабатывает перед
началом перестановки элементов сетки.layoutEnd – вызывается после
завершения анимации перестановки.move – событие для каждого отдельного
элемента, когда его позиция была изменена в сетке.Эти события полезны для синхронизации внешнего интерфейса с состоянием сетки, например, для обновления счётчиков, визуальных индикаторов или взаимодействия с другими библиотеками.
Пример использования:
grid.on('layoutEnd', () => {
console.log('Все элементы расположены в новой позиции');
});
Muuri позволяет автоматически отслеживать и реагировать на изменения размеров элементов и контейнера:
resize – срабатывает при изменении
размеров контейнера или элементов сетки.resizeEnd – фиксирует завершение
процесса изменения размеров, полезно для оптимизации повторного расчёта
расположения элементов.Пример:
grid.on('resizeEnd', () => {
grid.layout(true);
});
События Muuri можно комбинировать для построения сложных интерфейсов:
add → layoutStart → layoutEnd.dragMove влияет на видимость соседних элементов через
filter.Grid позволяет отслеживать все элементы
сразу.dragMove вызываются часто, следует избегать тяжёлых
операций внутри них.layoutEnd и resizeEnd гарантируют, что DOM уже
обновлён и безопасно работать с элементами.add, layoutStart и
layoutEnd позволяет создавать плавные интерактивные
интерфейсы.События жизненного цикла Grid в Muuri дают полный контроль над поведением сетки, позволяют управлять динамикой элементов, анимациями и взаимодействием пользователя. Понимание их последовательности и применения обеспечивает точное и предсказуемое управление интерфейсом.