Библиотека Muuri предоставляет мощные возможности для создания динамических, интерактивных сеток с поддержкой анимации и адаптивного расположения элементов. Одной из ключевых особенностей является система объявлений изменений (change notifications), которая позволяет отслеживать модификации в сетке и реагировать на них программно.
Muuri использует внутреннюю систему событий для уведомления о добавлении, удалении или изменении элементов. Основные события включают:
Каждое событие передаёт объект с данными о затронутых элементах, что позволяет гибко управлять поведением интерфейса.
Для отслеживания изменений используется метод
.on(eventName, callback):
const grid = new Muuri('.grid');
grid.on('add', (items) => {
console.log('Добавлены элементы:', items);
});
grid.on('move', (items) => {
console.log('Элементы перемещены:', items);
});
Ключевой момент: каждый элемент items
представляет собой объект Muuri.Item, который содержит
методы для управления состоянием элемента, например show(),
hide(), move().
События add и remove тесно связаны с
методами:
grid.add(elements, options) – добавляет новые элементы
в сетку.grid.remove(items, options) – удаляет элементы, при
этом можно указать removeElements: true, чтобы удалить
DOM-узлы, или removeElements: false, чтобы оставить их в
DOM.Пример с отслеживанием добавления:
const newItem = document.createElement('div');
newItem.classList.add('item');
grid.add(newItem);
grid.on('add', (items) => {
items.forEach(item => item.getElement().classList.add('highlight'));
});
Событие move возникает при изменении порядка элементов,
как вручную, так и через метод:
grid.sort(comparator, options) – сортирует элементы по
заданной функции сравнения.grid.move(element, index, options) – перемещает
конкретный элемент на указанную позицию.Отслеживание:
grid.on('move', (items) => {
items.forEach(item => {
console.log('Элемент перемещён:', item.getElement().textContent);
});
});
Важно: события move вызываются после
завершения анимации, обеспечивая корректное положение элементов.
Методы show() и hide() управляют видимостью
элементов. Соответствующие события show и hide
позволяют синхронизировать интерфейс:
grid.on('hide', (items) => {
items.forEach(item => item.getElement().style.opacity = 0.5);
});
grid.hide(grid.getItems().slice(0, 2)); // Скрываем первые два элемента
Особенности: Muuri сохраняет порядок элементов при скрытии, что позволяет возвращать их на прежние позиции без нарушения сетки.
События layoutStart и layoutEnd
сигнализируют о перестройке сетки, что полезно для выполнения сложных
анимаций или синхронизации с внешними компонентами:
grid.on('layoutStart', () => {
console.log('Перестройка сетки начата');
});
grid.on('layoutEnd', () => {
console.log('Перестройка сетки завершена');
});
Метод grid.layout(true) инициирует принудительную
перестройку, при этом все подписчики на layoutStart и
layoutEnd будут вызваны.
Muuri.Item (show, hide,
move) гарантируют корректные события и анимацию.Система объявлений изменений Muuri обеспечивает гибкое управление динамикой сетки и позволяет создавать сложные интерактивные интерфейсы с контролем над всеми состояниями элементов. Она служит связующим звеном между структурой DOM и визуальными эффектами, делая сетку полностью управляемой программно.