В библиотеке Packery параметр stagger
используется для создания плавной последовательной анимации при
перестройке сетки элементов. Он задаёт задержку между началом анимации
каждого элемента, что позволяет добиться эффекта «ступенчатого
появления» или «волноподобного движения» элементов при изменении их
положения.
Значение stagger задаётся в миллисекундах и передается
как опция при инициализации Packery или при вызове метода
layout():
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10,
stagger: 100 // задержка 100 мс между анимацией элементов
});
При задании stagger: 100 первый элемент начнёт анимацию
сразу, второй — через 100 мс, третий — через 200 мс и так далее.
Для корректного эффекта stagger важно настроить
CSS-анимацию или переход:
.grid-item {
transition: transform 0.4s ease;
}
Packery управляет позициями через CSS-свойство
transform. Значение stagger регулирует момент
применения новых трансформаций для каждого элемента.
Опцию stagger можно изменять динамически при повторной
перестройке сетки:
pckry.options.stagger = 50;
pckry.layout();
После вызова layout() элементы будут анимироваться с
новой задержкой. Это удобно для создания адаптивной анимации при
изменении количества элементов или размера контейнера.
stagger с CSS-трансформациями типа scale или
rotate для создания более выразительных анимаций:.grid-item {
transition: transform 0.5s ease, opacity 0.5s ease;
opacity: 0;
}
.grid-item.is-positioned {
opacity: 1;
}
Packery будет поочередно применять transform и изменять
opacity в соответствии с задержкой
stagger.
stagger для плавного «всплытия»:var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
pckry.layout(); // анимация с учетом stagger
Каждый новый элемент анимируется с отставанием, создавая визуальный поток появления.
stagger хорошо работает совместно с опциями
transitionDuration и gutter, но
требует, чтобы:
transform для изменения позиции
элементов.Если transitionDuration меньше значения
stagger, эффекта последовательной анимации может не быть
заметно, так как элементы будут перемещаться слишком быстро.
stagger обычно выбирается в диапазоне 50–200
мс. Меньшие значения дают почти одновременное движение, большие —
создают эффект волны.stagger может сделать анимацию слишком медленной.stagger, чтобы не перегружать интерфейс и не замедлять
отклик.Packery совместим по архитектуре с Masonry и Isotope, и
stagger работает аналогично в этих библиотеках, так как они
используют аналогичный механизм расчёта позиций и CSS-трансформаций.
Однако Packery обеспечивает более гибкую работу с свободным
размещением элементов, поэтому эффект ступенчатой анимации
выглядит естественнее, особенно при элементах разного размера.
Эффективное использование stagger позволяет создавать
динамичные сетки с визуально приятной анимацией, подчеркивая изменения
структуры и движение элементов, без потери производительности или
плавности интерфейса.