Masonry — это библиотека JavaScript, предназначенная для динамического расположения элементов в сетке с плавающими блоками, где каждый блок «подстраивается» под доступное пространство. Основные понятия при работе с Masonry — это layout и layoutItems. Понимание их взаимодействия критично для точного контроля расположения элементов и оптимизации производительности.
Layout в Masonry — это объект, управляющий расположением всех элементов сетки. Он отвечает за расчёт координат каждого блока и обработку их перемещений при изменении размеров контейнера или добавлении новых элементов.
items — массив
объектов layoutItem, которые нужно разместить;
isInstant — флаг, определяющий, нужно ли размещать элементы
без анимации.x и y для отдельного элемента на основе
текущего состояния колонок.colYs.layoutItems.LayoutItem — это объект, представляющий отдельный элемент сетки и инкапсулирующий его состояние. Каждый элемент контейнера преобразуется в layoutItem при инициализации Masonry или при динамическом добавлении.
x и
y.style.top,
style.left).Каждый layoutItem передаётся в layout при вызове
layoutItems(). Layout использует методы layoutItem для
вычисления позиции и применения стилей. При этом Masonry
обеспечивает:
isIgnored
можно исключать элементы из расчётов, что ускоряет работу при больших
сетках.measure() для динамических элементов предотвращает
наложение блоков.isInstant в
layoutItems() позволяет выбирать между мгновенным
расположением и плавной анимацией.import Masonry from 'masonry-layout';
const grid = document.querySelector('.grid');
const msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10
});
// Добавление нового элемента
const itemElem = document.createElement('div');
itemElem.className = 'grid-item';
grid.appendChild(itemElem);
const layoutItem = msnry.getItem(itemElem);
layoutItem.measure();
msnry.layoutItems([layoutItem], true);
В этом примере:
measure() обновляет размеры.layoutItems() размещает элемент мгновенно без анимации
(isInstant: true).layoutItems.layout + layoutItem обеспечивает
корректное, динамическое и анимированное расположение элементов.layoutItems, measure,
applyPosition и transitionTo позволяют гибко
управлять сеткой и оптимизировать производительность при динамическом
контенте.Эта структура — основа работы Masonry и позволяет создавать гибкие, отзывчивые сетки с минимальными усилиями при изменении контента.