В библиотеке Muuri объект Item
представляет собой отдельный элемент сетки и обладает множеством
свойств, которые определяют его состояние, положение и поведение внутри
контейнера. Понимание этих свойств критично для точного контроля за
сеткой и реализации сложных анимаций и фильтрации.
elementСвойство element хранит ссылку на DOM-элемент, который
представляет этот Item. Это стандартный HTML-узел, с
которым можно напрямую работать через методы DOM. Пример
использования:
let item = grid.getItems()[0];
console.log(item.element); // HTMLDivElement или другой тег контейнера
item.element.style.border = '2px solid red';
Особенности:
element можно добавлять события и слушатели.gridСвойство grid содержит ссылку на объект Muuri
Grid, которому принадлежит Item. Через это
свойство можно получить доступ к методам сетки, например
layout или filter, вызывая их относительно
конкретного элемента.
let gridInstance = item.grid;
gridInstance.layout(); // Перестраивает сетку, включая этот элемент
idКаждому Item автоматически присваивается уникальный
идентификатор id. Он нужен для внутреннего контроля и может
использоваться для поиска элемента в массиве сетки.
console.log(item.id); // например, 5
isActiveСвойство isActive отражает текущую активность
Item. Активный элемент виден в сетке и участвует в
фильтрации и сортировке. При установке isActive = false
элемент скрывается, но не удаляется из DOM.
item.isActive = false; // Элемент скрыт из сетки
console.log(item.isActive); // false
Важно: Для отображения скрытых элементов необходимо
использовать метод show или установить
isActive = true.
isVisibleisVisible указывает, отображается ли элемент в текущей
компоновке сетки. Отличие от isActive заключается в том,
что isVisible определяется текущим фильтром и положением
элемента.
if (!item.isVisible) {
console.log("Элемент скрыт фильтром");
}
isDraggingФлаг isDragging указывает, что элемент в данный момент
перетаскивается пользователем. Это свойство полезно для динамической
настройки стилей и взаимодействия с другими элементами сетки.
if (item.isDragging) {
item.element.style.opacity = 0.5;
}
isPositioningСвойство isPositioning показывает, что элемент в
процессе анимации своего перемещения внутри сетки. Когда элемент меняет
позицию, Muuri использует CSS-трансформации, и
isPositioning становится true до завершения
анимации.
item.on('move', () => {
if (item.isPositioning) console.log("Элемент двигается");
});
width и heightЭти свойства содержат текущие размеры элемента. Muuri автоматически
обновляет их при изменении DOM или при вызове метода
refreshItems. Они играют ключевую роль при перестройке
сетки и расчетах расположения элементов.
console.log(`Ширина: ${item.width}, Высота: ${item.height}`);
x и yКоординаты x и y отражают текущее положение
элемента относительно контейнера сетки. Значения используются для
анимации и вычисления новых позиций при перестроении.
console.log(item.x, item.y);
item.setPosition(100, 200); // Перемещение элемента в координаты (100, 200)
Особенности:
grid.layout().getElementМетод getElement() возвращает тот же DOM-элемент, что и
element, но через интерфейс Item. Полезен при
работе с методами, которые возвращают объекты Item без
прямого доступа к DOM.
let domNode = item.getElement();
show() и hide()Методы show и hide управляют видимостью
элемента. Они изменяют свойства isActive и инициируют
анимацию появления или скрытия.
item.hide(); // Скрытие с анимацией
item.show(); // Появление с анимацией
Особенности:
remove() и
destroy()remove() — удаляет элемент из сетки, оставляя DOM на
месте, если передан параметр true.destroy() — полностью удаляет элемент из сетки и из
DOM, очищая все слушатели и внутренние данные.item.remove(true); // Удаляет из сетки, оставляет DOM
item.destroy(); // Полное удаление
refreshDimensions()Метод refreshDimensions() пересчитывает размеры
элемента, что важно при изменении контента внутри Item.
item.refreshDimensions();
Особенности:
width и height.on и off для
событийItem поддерживает события, которые позволяют отслеживать
жизненный цикл элемента:
move — элемент перемещается.dragStart, dragEnd — начало и конец
перетаскивания.show, hide — элемент появляется или
скрывается.item.on('dragEnd', () => console.log('Перетаскивание завершено'));
item.off('dragEnd');
Эти события дают полный контроль над поведением отдельных элементов и позволяют создавать сложные интерактивные интерфейсы.
Свойства Item обеспечивают детальный контроль над
состоянием, положением и поведением каждого элемента в сетке
Muuri. Использование этих свойств совместно с методами
и событиями позволяет реализовать адаптивные, динамичные и анимированные
интерфейсы с высокой производительностью и точностью управления.