В библиотеке Muuri каждый элемент сетки представлен объектом
Item. Этот объект является абстракцией, которая
позволяет управлять элементами независимо от их положения в DOM. Объект
Item создаётся автоматически при инициализации сетки,
но также может быть создан вручную при динамическом добавлении элементов
через метод add().
Пример создания Item через добавление элемента в сетку:
const grid = new Muuri('.grid');
const element = document.createElement('div');
element.classList.add('item');
grid.add(element);
После добавления элемент автоматически превращается в объект Item, к которому можно применять методы управления.
Item предоставляет набор методов для контроля позиции и размеров элементов в сетке.
getPosition() — возвращает текущие
координаты элемента в сетке в виде объекта {x, y}.const pos = item.getPosition();
console.log(pos.x, pos.y);
move(x, y, [options]) — перемещает
элемент к указанной позиции относительно сетки. Параметр
options позволяет настроить анимацию:item.move(100, 200, { duration: 400, easing: 'ease-in-out' });
hide([options]) и
show([options]) — управляют видимостью элемента с
плавной анимацией.item.hide({ duration: 300 });
item.show({ duration: 300 });
getWidth() и getHeight()
— возвращают текущую ширину и высоту элемента, учитывая все применённые
стили и трансформации.Item предоставляет функциональность, позволяющую работать с критериями фильтрации и сортировки:
filter(predicate) — используется
сеткой для определения видимости элемента. Функция
predicate принимает объект Item и возвращает
true или false.sortWeight(weight) — задаёт числовой
вес элемента, который используется при сортировке.Пример сортировки элементов по весу:
grid.sort((a, b) => a.getSortData('weight') - b.getSortData('weight'));
Item предоставляет доступ к самому DOM-элементу и его содержимому:
getElement() — возвращает DOM-элемент,
связанный с Item.const el = item.getElement();
el.style.border = '1px solid red';
updateContent() — обновляет
содержимое элемента после изменения DOM, чтобы Muuri корректно
пересчитал размеры и позиции.
addClass(className) и
removeClass(className) — позволяют динамически
добавлять и удалять CSS-классы с элемента Item.
hasClass(className) — проверяет
наличие определённого CSS-класса на элементе.
Элементы сетки часто требуют адаптивного изменения размеров. Для этого используются следующие методы:
resize([width, height, options]) —
изменяет размеры элемента с возможностью анимации.item.resize(200, 150, { duration: 300 });
refreshDimensions() — пересчитывает
текущие размеры элемента на основе его DOM-стиля. Это важно после
изменения контента или CSS.Item поддерживает привязку событий, которые позволяют отслеживать жизненный цикл элемента:
on(event, callback) — подписка на
событие.off(event, callback) — удаление
подписки.Основные события Item:
move — элемент перемещается;show / hide — элемент показан или
скрыт;dragStart / dragEnd — начало и завершение
перетаскивания;destroy — элемент удаляется из сетки.Пример подписки на событие перетаскивания:
item.on('dragEnd', () => {
console.log('Элемент перетаскивание завершено');
});
remove([options]) — удаляет элемент из
сетки и из DOM. Опция options позволяет анимировать процесс
удаления.item.remove({ removeElements: true, duration: 400 });
destroy([options]) — полностью
уничтожает объект Item, снимая все события и связи с DOM. Этот метод
полезен для полной очистки памяти при динамическом удалении
элементов.Если сетка поддерживает перетаскивание, Item предоставляет методы для управления этим процессом:
isDragging() — возвращает
true, если элемент в данный момент перетаскивается.getDragData() — возвращает данные о
текущем состоянии перетаскивания, включая координаты и начальные
позиции.Эти методы позволяют интегрировать Item с внешними системами drag-and-drop и выполнять кастомное управление элементами сетки.
Item тесно интегрирован с родительской сеткой. Ключевые методы взаимодействия:
getGrid() — возвращает объект сетки, к
которой принадлежит элемент.isActive() — проверяет, активен ли
элемент (не скрыт и не удалён).isVisible() — возвращает
true, если элемент в данный момент отображается и проходит
фильтр.Использование всех этих методов позволяет создавать гибкие, динамичные и интерактивные сетки с полным контролем над каждым элементом. Каждый объект Item выступает как самостоятельная единица, способная управлять своим положением, размерами, видимостью и состоянием перетаскивания, обеспечивая мощный инструмент для построения сложных интерфейсов на базе Muuri.