В библиотеке Muuri конфигурация сетки
(grid) и её элементов играет ключевую роль в управлении
поведением и внешним видом. Повторное использование конфигураций
позволяет стандартизировать настройки и снизить количество
дублирующегося кода. Основными объектами, которые подлежат конфигурации,
являются:
Лучшей практикой является вынесение повторяющихся настроек в отдельные объекты:
const defaultGridOptions = {
layout: {
fillGaps: true,
horizontal: false,
alignRight: false,
alignBottom: false,
},
dragEnabled: true,
dragSort: true,
dragSortInterval: 50,
dragContainer: document.body,
layoutOnResize: 100
};
const defaultItemOptions = {
visible: true,
visibleStyles: {
transform: 'scale(1)',
opacity: 1
},
hiddenStyles: {
transform: 'scale(0)',
opacity: 0
},
showDuration: 400,
hideDuration: 400
};
Использование таких объектов позволяет при создании сетки или элементов легко расширять и модифицировать конфигурацию:
const grid = new Muuri('.grid', {
...defaultGridOptions,
dragSortPredicate: {
threshold: 50,
action: 'move'
}
});
Muuri поддерживает гибкое переопределение отдельных свойств конфигурации при инициализации новой сетки или элемента. Это позволяет создавать варианты базовой конфигурации без дублирования всего объекта:
const customGridOptions = {
...defaultGridOptions,
dragEnabled: false,
layout: {
...defaultGridOptions.layout,
fillGaps: false
}
};
const customGrid = new Muuri('.custom-grid', customGridOptions);
Здесь используется оператор расширения
(...), который создаёт глубокую копию объекта и
позволяет безопасно изменять отдельные свойства.
Система перетаскивания и сортировки Muuri может быть конфигурирована отдельно, что особенно важно при переиспользовании настроек:
const dragConfig = {
dragEnabled: true,
dragStartPredicate: {
distance: 10,
delay: 0
},
dragReleaseDuration: 300,
dragSort: true
};
Эту конфигурацию можно подключить к разным сеткам, комбинируя с базовыми параметрами:
const gridA = new Muuri('.grid-a', {
...defaultGridOptions,
...dragConfig
});
const gridB = new Muuri('.grid-b', {
...defaultGridOptions,
dragSort: false
});
Muuri позволяет изменять конфигурацию уже созданной сетки с помощью
методов grid.setOptions() и
item.set(). Это даёт возможность
динамически адаптировать сетку без её пересоздания:
grid.setOptions({
layout: { fillGaps: false },
dragEnabled: false
});
grid.getItems().forEach(item => {
item.set({ visible: false });
});
Использование единых объектов конфигурации в сочетании с динамическим обновлением позволяет создавать адаптивные интерфейсы с минимальным количеством повторяющегося кода.
При добавлении новых элементов в сетку через метод
grid.add(), рекомендуется использовать
базовые или кастомные конфигурации элементов:
const newItem = document.createElement('div');
newItem.classList.add('item');
grid.add(newItem, {
...defaultItemOptions,
showDuration: 600
});
Такой подход обеспечивает одинаковое поведение всех элементов и упрощает управление их стилями и анимациями.
setOptions и item.set().function createGrid(selector, options = {}) {
return new Muuri(selector, {
...defaultGridOptions,
...dragConfig,
...options
});
}
const grid1 = createGrid('.grid1', { dragEnabled: false });
const grid2 = createGrid('.grid2', { layout: { fillGaps: false } });
Такой метод позволяет управлять десятками сеток, сохраняя единый стиль и логику поведения элементов.
Эффективное переиспользование конфигураций делает работу с Muuri более предсказуемой, структурированной и поддерживаемой, особенно при сложных интерфейсах с множеством сеток и элементов.