В библиотеке Muuri центральным объектом является
Grid. Экземпляр Grid создаётся через конструктор:
const grid = new Muuri('.grid', {
dragEnabled: true,
layout: {
rounding: false
}
});
Здесь .grid — селектор контейнера, содержащего элементы
сетки. Параметры конфигурации позволяют управлять поведением элементов:
возможность перетаскивания, режим выравнивания, анимацию и многое
другое.
Экземпляр Grid предоставляет богатый набор методов, которые делятся на несколько групп: управление элементами, фильтрация, сортировка, работа с размерами, события и динамическая перестройка сетки.
add(items, options)Метод добавляет новые элементы в сетку. items могут быть
DOM-узлами или массивом узлов. Опции позволяют указать, где вставлять
элементы и как их анимировать:
grid.add([newItem1, newItem2], { index: 0, layout: 'instant' });
'instant' или 'animate').remove(items, options)Удаляет элементы из сетки:
grid.remove([item1, item2], { removeElements: true });
true, удаляет
элементы из DOM после удаления из сетки.getItems([element]) и
getItem(element)getItems() возвращает массив всех элементов сетки.getItem(element) возвращает конкретный объект GridItem
по DOM-узлу.const item = grid.getItem(document.querySelector('.item'));
layout([instant])Метод перестраивает сетку, выравнивая элементы:
grid.layout(); // с анимацией
grid.layout(true); // без анимации
true, перестройка
происходит мгновенно без анимации.refreshItems()Обновляет информацию о размерах и позиции элементов. Обычно используется после динамического изменения содержимого:
grid.refreshItems().layout();
layout изменения не
будут визуально применены.refreshSortData()Обновляет данные для сортировки, если они зависят от содержимого элементов:
grid.refreshSortData().sort('name');
sort(criteria, options)Сортирует элементы сетки. criteria может быть строкой
(имя поля) или функцией сравнения:
grid.sort((a, b) => a.getElement().dataset.order - b.getElement().dataset.order);
options:
layout: 'instant' или
'animate'descending: true/false для обратного
порядкаfilter(filterFunction, options)Фильтрует элементы сетки:
grid.filter(item => item.getElement().dataset.category === 'books');
sort.show(items, options)
/ hide(items, options)Методы управления видимостью элементов:
grid.hide(itemsToHide, { layout: 'instant' });
grid.show(itemsToShow, { layout: 'animate' });
move(item, index, options)Перемещает элемент в новую позицию:
grid.move(item, 2, { layout: 'animate' });
Grid поддерживает подписку на события через on и
off:
grid.on('dragStart', (item) => console.log('Начало перетаскивания', item));
grid.on('layoutEnd', () => console.log('Перестройка завершена'));
Основные события:
layoutStart / layoutEnd — перестройка
сеткиdragStart / dragEnd — начало и конец
перетаскиванияfilter / sort — после фильтрации и
сортировкиСобытия позволяют строить сложную логику динамического интерфейса и интегрировать Muuri с другими библиотеками.
При добавлении новых элементов и их последующей фильтрации/сортировке важно соблюдать последовательность методов:
grid.add([newItem])
.refreshItems()
.layout();
Для удаления:
grid.remove([itemToRemove], { removeElements: true })
.layout();
Эта последовательность гарантирует корректное обновление размеров, позиций и визуальную анимацию.
enableDrag() /
disableDrag()Управляет возможностью перетаскивания:
grid.enableDrag();
grid.disableDrag();
dragEnabled: true перетаскивание
интегрируется с фильтрацией и сортировкой без конфликтов.moveElement(element, x, y)Позволяет программно изменять позицию отдельного элемента, не вызывая полной перестройки:
grid.getItem(element).move(x, y);
Muuri предоставляет полную систему управления сеткой через экземпляр Grid, объединяя динамическое добавление/удаление, фильтрацию, сортировку, анимацию и события. Методы экземпляра можно комбинировать для построения интерактивных и отзывчивых интерфейсов с минимальными усилиями.