Для работы с библиотекой Muuri первым шагом является
создание экземпляра Grid, который управляет расположением
элементов на странице. Конструктор принимает два основных параметра:
const grid = new Muuri(container, options);
const grid = new Muuri('.grid', {
items: '.item', // CSS-селектор элементов сетки
layout: {
rounding: true // округление координат для плавного позиционирования
}
});
В данном примере .grid — контейнер сетки, а
.item — отдельные элементы, которые будут упорядочены и
анимированы библиотекой.
itemsОпределяет элементы, которые Muuri будет считать элементами сетки. Может быть:
'.item')Пример:
items: document.querySelectorAll('.item')
layoutОбъект с параметрами раскладки:
true/false, заполнять ли
пустоты при изменении размеров элементов.true/false, округлять
координаты для устранения дрожания элементов.true/false, устанавливает
горизонтальную ориентацию сетки.layout: {
fillGaps: true,
rounding: true,
horizontal: false
}
dragEnabledВключает или отключает возможность перетаскивания элементов.
dragEnabled: true
add()Добавление новых элементов в сетку:
const newItem = document.createElement('div');
newItem.classList.add('item');
grid.add(newItem);
remove()Удаление элементов из сетки:
grid.remove(grid.getItems().slice(0, 1), { removeElements: true });
Параметр removeElements определяет, удаляется ли элемент
из DOM полностью.
layout()Перестраивает сетку с текущими элементами. Можно вызвать вручную после добавления, удаления или изменения размеров элементов:
grid.layout();
refreshItems()Обновляет внутренние данные о размерах элементов. Рекомендуется использовать после изменения контента элементов:
grid.refreshItems().layout();
Muuri позволяет реагировать на действия с элементами сетки через события:
add — элемент добавленremove — элемент удаленlayoutStart — начало перестройки сеткиlayoutEnd — завершение перестройкиПример подписки:
grid.on('layoutEnd', () => {
console.log('Сетка обновлена');
});
const grid = new Muuri('.grid', {
dragEnabled: true,
dragSort: true,
dragContainer: document.body,
dragStartPredicate: {
distance: 10, // минимальное смещение для начала перетаскивания
handle: '.handle' // элемент, с которого можно перетаскивать
}
});
enableDrag() — включить drag для отдельных
элементовdisableDrag() — отключить drag для отдельных
элементовgrid.getItems().forEach(item => item.enableDrag());
Экземпляр Grid позволяет фильтровать и сортировать
элементы без изменения DOM:
grid.filter(item => item.getElement().dataset.category === 'cat1');
grid.sort((a, b) => a.getElement().dataset.order - b.getElement().dataset.order);
filter() принимает функцию или строковый селектор.sort() принимает функцию сравнения, аналогичную
стандартному Array.prototype.sort.После динамического изменения содержимого рекомендуется использовать цепочку методов:
grid.refreshItems().layout();
Если элементы подгружаются асинхронно, вызов
refreshItems() гарантирует правильное измерение размеров, а
layout() — корректное расположение.
layout: { rounding: true } для повышения
производительности.layout() без
необходимости — использовать цепочку
refreshItems().layout().add(itemsArray, { layout: false }), а затем один раз
вызвать layout().Muuri предоставляет полный контроль над элементами сетки через
создание экземпляра Grid, его методы и события, позволяя
создавать адаптивные, интерактивные и анимированные интерфейсы с
минимальными усилиями.