Packery — это библиотека для динамической организации сетки элементов, где каждый элемент может иметь произвольный размер. Важным аспектом анимации в Packery является задержка между перемещениями элементов, которая позволяет создавать плавное визуальное перестроение сетки при добавлении, удалении или изменении размеров элементов.
transitionDurationPackery использует CSS-переходы для анимации позиции элементов.
Основное свойство, отвечающее за скорость анимации, — это
transitionDuration:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10,
transitionDuration: '0.4s'
});
'0.3s' или '400ms'.transitionDuration: 0s элементы будут мгновенно переходить
в новые позиции без плавного эффекта.stagger)Для создания эффектов поочередного перемещения элементов применяется
концепция staggering. Packery напрямую не имеет
собственного свойства stagger, но его можно реализовать
через комбинацию transition-delay в CSS и событий
Packery.
Пример применения поочередной анимации при добавлении элементов:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: 10,
transitionDuration: '0.4s'
});
var items = document.querySelectorAll('.grid-item');
items.forEach((item, index) => {
item.style.transitionDelay = (index * 0.1) + 's';
});
pckry.appended(items);
transition-delay на основе его индекса, что создаёт эффект
каскадного появления или перестановки.transform, left,
top).Packery предоставляет события layoutComplete,
dragItemPositioned и другие, которые позволяют управлять
задержками программно. Например, для динамического обновления задержки
при изменении сетки:
pckry.on('layoutComplete', function(items) {
items.forEach((item, index) => {
item.element.style.transitionDelay = (index * 0.05) + 's';
});
});
Сценарии применения:
transitionDuration и transitionDelayДля достижения естественной анимации рекомендуется сочетать оба свойства:
transitionDuration определяет скорость движения
элемента.transitionDelay задаёт момент начала
движения, создавая эффект последовательного смещения.Пример комбинации:
item.style.transitionDuration = '0.4s';
item.style.transitionDelay = (index * 0.08) + 's';
Такой подход позволяет добиться плавного и профессионального эффекта перестройки сетки без резких скачков.
transitionDuration (0.3–0.5 секунд) и
transitionDelay (0.05–0.15 секунд на элемент)..grid-item {
transition: transform var(--duration, 0.4s) ease var(--delay, 0s);
}
items.forEach((item, index) => {
item.style.setProperty('--delay', (index * 0.08) + 's');
});
Эти подходы обеспечивают контроль над тем, как элементы перемещаются и появляются, делая интерфейс более плавным и визуально приятным.