Метод prepended в библиотеке Packery
предназначен для динамического добавления новых элементов в контейнер
сетки в начале, то есть перед всеми существующими элементами. В отличие
от стандартного метода append, который добавляет элементы в
конец, prepended обеспечивает обратный порядок
добавления, сохраняя адаптивную перестановку элементов
сетки.
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
var newItems = document.createElement('div');
newItems.classList.add('grid-item');
newItems.textContent = 'Новый элемент';
pckry.prepended(newItems);
Пояснения ключевых параметров:
grid — DOM-элемент контейнера сетки, с которым работает
Packery.itemSelector — CSS-селектор элементов сетки.gutter — промежуток между элементами.newItems — новые элементы, которые добавляются в начало
сетки.Метод автоматически перерассчитывает позиции всех элементов, чтобы сохранить плотную компоновку.
Метод prepended поддерживает добавление как одного
элемента, так и массива элементов:
var itemsArray = [];
for (var i = 0; i < 5; i++) {
var item = document.createElement('div');
item.className = 'grid-item';
item.textContent = `Элемент ${i+1}`;
itemsArray.push(item);
}
pckry.prepended(itemsArray);
Packery интегрирует все новые элементы перед текущими и сразу
пересчитывает позиции, без необходимости дополнительного вызова
layout.
При работе с элементами, содержащими изображения, важно учитывать, что Packery вычисляет размеры элементов на основе фактического рендеринга. Для корректного позиционирования используется библиотека imagesLoaded:
imagesLoaded(itemsArray, function() {
pckry.prepended(itemsArray);
});
Такой подход гарантирует, что сетка не «прыгает» после загрузки изображений.
Packery поддерживает плавную анимацию новых элементов через CSS-переходы. Для этого достаточно добавить CSS:
.grid-item {
transition: transform 0.4s ease, opacity 0.4s ease;
opacity: 0;
}
.grid-item.is-visible {
opacity: 1;
}
И в JavaScript после добавления элементов:
pckry.prepended(itemsArray);
itemsArray.forEach(function(item) {
item.classList.add('is-visible');
});
Это создаёт эффект появления элемента с плавной перестройкой сетки.
layout и shiftLayoutМетод prepended тесно интегрируется с другими методами
Packery:
layout() — полностью пересчитывает сетку. Используется,
если элементы были изменены после добавления.shiftLayout() — обновляет только позиции, сдвигая
элементы без полного пересчёта.Пример комбинирования:
pckry.prepended(itemsArray);
pckry.shiftLayout();
Такой подход полезен при добавлении большого числа элементов, когда полное перераспределение дорого по производительности.
Packery является расширением концепции Masonry, и
метод prepended работает по схожим принципам:
imagesLoaded.prepended с shiftLayout для оптимизации
производительности.itemSelector строго по уникальным
классам, чтобы новые элементы корректно учитывались Packery.Метод prepended обеспечивает эффективное
добавление новых элементов в начало сетки, автоматическое
перераспределение элементов и возможность интеграции с анимациями и
изображениями. Это делает его незаменимым для интерфейсов с динамически
обновляемым контентом, например, для лент новостей, галерей или
панелей виджетов.