Библиотека Masonry в JavaScript ориентирована на динамическую компоновку элементов сетки, позволяя автоматически распределять блоки по колонкам с учетом их размеров. Одним из ключевых аспектов работы с Masonry является возможность частичного обновления сетки, когда требуется добавить, удалить или перестроить лишь часть элементов, без полного пересоздания всей сетки.
appended()Метод appended() используется для добавления новых
элементов в существующую сетку и их интеграции в текущий макет. Основная
логика:
// Инициализация Masonry
var grid = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
// Создание новых элементов
var elems = document.createElement('div');
elems.className = 'grid-item';
elems.textContent = 'Новый элемент';
// Добавление элемента в DOM
document.querySelector('.grid').appendChild(elems);
// Обновление Masonry
grid.appended(elems);
Особенности метода:
appended().prepended()Для добавления элементов в начало сетки применяется метод
prepended(). Работает аналогично appended(),
но вставляет элементы в начало контейнера, с
перераспределением всех последующих блоков:
var newElem = document.createElement('div');
newElem.className = 'grid-item';
newElem.textContent = 'Первый элемент';
grid.prepended(newElem);
Важно учитывать:
prepended() Masonry пересчитывает
позиции всех элементов, чтобы новые блоки корректно вписались в
сетку.remove() и
layout()Удаление элементов с частичным обновлением требует комбинации методов
remove() и layout():
var item = document.querySelector('.grid-item-to-remove');
grid.remove(item);
grid.layout();
Ключевые моменты:
remove() удаляет элемент из Masonry и из DOM.layout() выполняет перерасчет позиций оставшихся
элементов.Если требуется изменить размер или содержимое существующего
элемента, не создавая новые, используется комбинация изменения
DOM и метода layout():
var item = document.querySelector('.grid-item');
item.style.height = '200px'; // Изменение размера
grid.layout(); // Перерасчет сетки
Рекомендации:
layout().Для сеток с динамическим контентом, содержащим изображения, необходимо учитывать их отложенную загрузку. Masonry не знает размеры изображений до их полной загрузки, поэтому частичное обновление часто комбинируют с imagesLoaded:
imagesLoaded('.grid', function() {
grid.layout();
});
Принципы работы:
imagesLoaded отслеживает загрузку всех изображений
внутри сетки.layout(),
корректно распределяя элементы.appended() внутри
колбэка imagesLoaded.Иногда возникает необходимость обновлять сразу несколько элементов:
var newItems = document.querySelectorAll('.new-grid-items');
grid.appended(newItems);
Особенности работы с группами:
layout(), повышая производительность.layout() для перераспределения оставшихся блоков.appended() или prepended().layout() после изменения размеров
существующих элементов.imagesLoaded перед
перерасчетом макета.layout() после каждого
изменения, объединяя несколько изменений в один вызов.Частичное обновление в Masonry позволяет эффективно управлять
динамическим контентом, избегая полной перестройки сетки и сохраняя
плавность интерфейса даже при большом количестве элементов. Правильное
использование методов appended(), prepended(),
remove() и layout() обеспечивает
оптимальное распределение блоков и высокую
производительность веб-приложений.