Библиотека Muuri предоставляет мощные средства для управления сеткой элементов, включая возможность добавления новых элементов не только в конец, но и в конкретное место сетки. Это особенно важно при динамических интерфейсах, где порядок элементов критичен.
Для управления вставкой элементов используются методы
add(),
addAt() и
move(), каждый из которых имеет свои
особенности.
add(items, options) — добавляет один
или несколько элементов в сетку. По умолчанию элементы добавляются в
конец коллекции, однако можно указать параметры анимации и layout:
grid.add([element], { layout: 'instant', index: 0 });
Здесь параметр index позволяет вставить элемент на
определённую позицию в коллекции. Если index не указан,
элемент окажется в конце.
addAt(item, index, options) — прямой
метод для вставки элемента на конкретную позицию:
grid.addAt(element, 2, { layout: 'instant' });
В этом примере элемент будет вставлен на третью позицию (индексация начинается с нуля). После вставки автоматически вызывается layout, если не указано иное.
move(item, toIndex, options) —
используется для перемещения уже существующего элемента внутри сетки.
Позволяет менять порядок элементов динамически:
grid.move(item, 0, { layout: 'swap', instant: false });
Параметр layout может быть 'swap' (обмен
позициями), 'instant' (мгновенное изменение) или
'fade' (плавное исчезновение и появление). Это даёт полное
управление визуальной анимацией при перестановке.
Элементы в сетке имеют внутренний индекс, который можно использовать
для точной вставки. Помимо числового индекса, можно применять кастомные
ключи через опцию id:
const element = document.createElement('div');
element.dataset.id = 'unique-element';
grid.add(element, { index: 1 });
При необходимости перемещения элемента по ключу можно использовать:
const item = grid.getItems().find(i => i.getElement().dataset.id === 'unique-element');
grid.move(item, 0);
Это упрощает работу с динамически генерируемыми элементами, особенно когда порядок элементов зависит от внешней логики приложения.
Muuri позволяет гибко управлять анимацией при добавлении элементов. Основные параметры:
'instant', 'fade', 'swap',
'default').true, вставка
происходит мгновенно без анимации.'ease', 'linear',
'ease-in-out').Пример вставки с плавной анимацией:
grid.add(element, { index: 1, layout: { duration: 400, easing: 'ease-in-out' } });
Добавление нескольких элементов одновременно улучшает производительность и сохраняет анимацию целостной:
const elements = [el1, el2, el3];
grid.add(elements, { index: 2, layout: { duration: 300, easing: 'ease' } });
Muuri автоматически рассчитывает позиции всех элементов, перемещая существующие элементы, чтобы освободить место для новых.
Вставка в определённую позицию полезна в следующих сценариях:
add() с массивом, чтобы избежать
многократного пересчёта layout.layout: 'instant', а затем
вызвать глобальный grid.layout() после вставки всех
элементов, чтобы минимизировать мерцания.getItems() и фильтрации
по dataset позволяет безопасно вставлять и перемещать
элементы даже в динамических коллекциях.Эти механизмы делают Muuri гибкой библиотекой для построения адаптивных и интерактивных сеток с точным контролем позиции каждого элемента.