Библиотека Muuri предоставляет мощный механизм для создания гибких, динамических сеток, которые можно сортировать, фильтровать и анимировать. Одним из ключевых аспектов работы с сеткой является инспектирование её состояния, что позволяет получать информацию о положении элементов, их видимости, сортировке и активности.
Для начала необходимо иметь экземпляр сетки. Создание Grid осуществляется через конструктор:
const grid = new Muuri('.grid', {
dragEnabled: true,
layout: {
rounding: false
}
});
Экземпляр grid становится главным инструментом для
инспекции и управления состоянием.
Item. Каждый Item
содержит информацию о DOM-элементе и текущем положении в сетке.const items = grid.getItems();
console.log(items.length); // количество элементов
Item.items.forEach(item => {
console.log(item.getElement().textContent);
});
const firstItemId = items[0].getId();
if (items[0].isActive()) {
console.log('Элемент активен');
}
true,
если элемент видим после применения фильтров или скрытия.console.log(items.filter(item => item.isVisible()).length);
Muuri хранит текущие координаты каждого элемента внутри сетки. Для
получения этих данных используются методы
item.getPosition() и
item.getWidth()/getHeight():
items.forEach(item => {
const pos = item.getPosition();
console.log(`Элемент #${item.getId()}: x=${pos.left}, y=${pos.top}`);
});
Важно: координаты учитывают текущую трансформацию элементов в DOM, что позволяет синхронизировать внешние скрипты с визуальным состоянием сетки.
Muuri поддерживает события, которые позволяют динамически отслеживать изменения:
grid.on('layoutEnd', () => {
console.log('Сетка обновлена');
});
grid.on('filter', (items) => {
console.log(`Видимыми стали ${items.length} элементов`);
});
Использование событий позволяет всегда иметь актуальную информацию о состоянии Grid и реагировать на изменения без необходимости вручную опрашивать элементы.
Для анализа состояния Grid целиком используют комбинацию методов
getItems(), isActive(),
isVisible(), а также координат элементов:
const gridState = grid.getItems().map(item => ({
id: item.getId(),
visible: item.isVisible(),
active: item.isActive(),
position: item.getPosition()
}));
console.table(gridState);
Такой подход обеспечивает полную картину состояния сетки, включая видимость, активность и расположение каждого элемента.
Для реализации сложных логик, например анимации или синхронизации с внешним хранилищем, удобно сохранять снимки состояния и сравнивать их с текущим состоянием:
const previousState = grid.getItems().map(item => item.getId());
grid.on('layoutEnd', () => {
const currentState = grid.getItems().map(item => item.getId());
if (previousState.join() !== currentState.join()) {
console.log('Порядок элементов изменился');
}
});
Muuri позволяет группировать элементы с помощью фильтров. Для
получения состояния конкретной группы можно использовать
grid.getItems(filter):
const visibleItems = grid.getItems(item => item.isVisible());
console.log(`Видимых элементов: ${visibleItems.length}`);
Фильт может быть любой функцией, возвращающей true для
элементов, которые нужно включить в результат.
getItems().Инспектирование состояния Grid в Muuri является фундаментальной частью построения динамических интерфейсов, позволяя получать детальную информацию о каждом элементе и всей сетке, обеспечивая гибкое управление и синхронизацию с другими компонентами приложения.