addItems и remove

Библиотека Masonry в JavaScript предоставляет удобные методы для динамического управления элементами сетки. Среди них особое место занимают методы addItems и remove, позволяющие добавлять новые элементы или удалять существующие с сохранением корректного расположения сетки.


Метод addItems

Метод addItems используется для добавления одного или нескольких элементов в Masonry-сетку. Основная цель — интегрировать новые элементы так, чтобы сетка автоматически перестроилась без нарушения существующей компоновки.

Синтаксис:

masonryInstance.addItems( elems )

Параметры:

  • elems — HTML-элемент или массив элементов, которые необходимо добавить в сетку. Это могут быть как существующие элементы DOM, так и динамически созданные через document.createElement.

Особенности работы:

  1. Метод не вставляет элементы в DOM автоматически, он только добавляет их в массив элементов Masonry для последующего размещения. Для отображения нужно использовать метод append или добавить элементы вручную в контейнер.
  2. После добавления элементов рекомендуется вызвать masonryInstance.layout() для перерасчета расположения всех элементов.

Пример использования:

// Создание нового элемента
let newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'Новый элемент';

// Добавление в Masonry
masonryInstance.addItems(newItem);

// Вставка в DOM и перерасчет сетки
document.querySelector('.grid').appendChild(newItem);
masonryInstance.layout();

Добавление нескольких элементов одновременно:

let items = [];
for(let i = 0; i < 3; i++) {
    let item = document.createElement('div');
    item.classList.add('grid-item');
    item.textContent = `Элемент ${i+1}`;
    items.push(item);
    document.querySelector('.grid').appendChild(item);
}

masonryInstance.addItems(items);
masonryInstance.layout();

Важно: метод addItems сам по себе не управляет DOM, он только сообщает Masonry о появлении новых элементов для корректного позиционирования.


Метод remove

Метод remove предназначен для удаления элементов из Masonry-сетки. После удаления элемент перестает участвовать в расчете расположения сетки и может быть удален из DOM.

Синтаксис:

masonryInstance.remove( elems )

Параметры:

  • elems — HTML-элемент или массив элементов, которые необходимо удалить.

Особенности работы:

  1. Метод автоматически обновляет внутренний массив элементов Masonry, удаляя переданные элементы.
  2. После вызова remove рекомендуется вызывать masonryInstance.layout() или masonryInstance.reloadItems() для перерасчета сетки.
  3. Если элемент удаляется только из Masonry, но остаётся в DOM, он больше не участвует в позиционировании сетки.

Пример удаления одного элемента:

let itemToRemove = document.querySelector('.grid-item:nth-child(2)');
masonryInstance.remove(itemToRemove);
masonryInstance.layout(); // перерасчет сетки

Удаление нескольких элементов:

let itemsToRemove = document.querySelectorAll('.grid-item.to-remove');
masonryInstance.remove(itemsToRemove);
masonryInstance.layout();

Взаимодействие addItems и remove с другими методами

  • layout() — перерасчет расположения всех элементов. Используется после добавления или удаления.
  • appended() — сочетание добавления и автоматического перерасчета позиции новых элементов. Позволяет объединить addItems и layout в один вызов:
let newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'Авто-добавление';
document.querySelector('.grid').appendChild(newItem);

masonryInstance.appended(newItem); // автоматически вызывает addItems + layout
  • prepended() — добавление элементов в начало сетки с автоматическим перерасчетом.

Использование addItems и remove позволяет создавать динамические сетки, где элементы могут добавляться или удаляться без полной перезагрузки страницы и с сохранением оптимального расположения всех блоков.


Практические рекомендации

  1. Всегда добавляйте элементы в DOM до вызова layout(), чтобы Masonry корректно определял размеры и позиции.
  2. Для массовых изменений используйте массивы элементов — это экономит ресурсы и сокращает количество вызовов layout().
  3. Метод remove не удаляет элементы из DOM автоматически. Если нужно полностью удалить элемент, используйте сочетание remove() и element.remove():
masonryInstance.remove(item);
item.remove();
masonryInstance.layout();
  1. Для плавной анимации добавления и удаления элементов рекомендуется комбинировать Masonry с CSS-переходами, используя классы с изменением opacity и transform.

addItems и remove формируют ядро динамического управления сеткой в Masonry, обеспечивая гибкость при работе с изменяющимся контентом и позволяя поддерживать аккуратную, компактную верстку без лишних затрат на перерасчет всей страницы.