Muuri — это мощная библиотека для создания сеток с анимацией и перетаскиванием элементов в JavaScript. Одной из часто востребованных конфигураций является горизонтальная раскладка, когда элементы располагаются слева направо и могут динамически изменять своё положение при добавлении, удалении или перетаскивании.
Для создания горизонтальной сетки в Muuri ключевым моментом является настройка layout и размеров элементов. Основные параметры:
layout: { horizontal: true } — задаёт горизонтальное
расположение элементов.layout: { fillGaps: true } — позволяет автоматически
заполнять пустые места при перемещении элементов.layout: { alignRight: false, alignBottom: false } —
управляет выравниванием сетки по краям контейнера.Пример инициализации горизонтальной сетки:
const grid = new Muuri('.grid', {
layout: {
horizontal: true,
fillGaps: true,
alignRight: false,
alignBottom: false
},
dragEnabled: true
});
В этом примере элементы будут выстраиваться слева направо,
автоматически заполняя промежутки. Флаг dragEnabled
включает возможность перетаскивания элементов пользователем.
В горизонтальной раскладке важно правильно управлять размерами
элементов. Muuri позволяет использовать динамическое вычисление
размеров через параметр layoutOnResize и методы
refreshItems:
layoutOnResize: true — сетка автоматически
перестраивается при изменении размеров контейнера или оконного
окна.grid.refreshItems().layout() — ручной пересчёт размеров
и перераспределение элементов.Пример динамической перестройки:
window.addEventListener('resize', () => {
grid.refreshItems().layout();
});
Muuri использует встроенную систему анимации для горизонтальных сеток. Основные опции:
layoutDuration — длительность анимации в
миллисекундах.layoutEasing — функция плавности, например
'ease', 'ease-in-out'.dragSort — позволяет переставлять элементы внутри сетки
или между несколькими сетками.Пример:
const grid = new Muuri('.grid', {
layout: {
horizontal: true,
fillGaps: true,
alignRight: false,
alignBottom: false,
layoutDuration: 400,
layoutEasing: 'ease-in-out'
},
dragEnabled: true,
dragSort: true
});
Эта конфигурация обеспечивает плавное перемещение элементов при изменении их порядка.
Добавление и удаление элементов в горизонтальной раскладке требует корректного обновления сетки:
const newItem = document.createElement('div');
newItem.className = 'item';
grid.add(newItem);
grid.layout();
const itemToRemove = grid.getItems()[0];
grid.remove(itemToRemove, { removeElements: true });
grid.layout();
При удалении и добавлении элементов сетка автоматически перераспределяет оставшиеся элементы, чтобы заполнить пустоты.
Muuri позволяет комбинировать горизонтальную раскладку с дополнительными методами выравнивания:
alignRight: false и CSS-свойств контейнера.gutter задают горизонтальные и вертикальные промежутки
между элементами.const grid = new Muuri('.grid', {
layout: {
horizontal: true,
fillGaps: true
},
dragEnabled: true,
layoutOnResize: true
});
CSS:
.grid {
display: flex;
justify-content: center;
gap: 10px;
}
.item {
width: 150px;
height: 150px;
}
Для горизонтальной раскладки часто используют dragSort между несколькими сетками:
const grid1 = new Muuri('.grid1', { layout: { horizontal: true }, dragEnabled: true });
const grid2 = new Muuri('.grid2', { layout: { horizontal: true }, dragEnabled: true });
grid1.on('dragEnd', () => grid1.refreshItems().layout());
grid2.on('dragEnd', () => grid2.refreshItems().layout());
grid1.sync(grid2);
Это позволяет перемещать элементы между горизонтальными сетками, сохраняя анимацию и порядок.
При работе с большими горизонтальными сетками важно учитывать:
layout() при изменении
одного элемента.layoutOnResize: true только при
необходимости, чтобы избежать постоянных перерасчётов.Эффективная комбинация этих подходов обеспечивает плавную работу интерфейса даже с сотнями элементов в горизонтальной сетке.