Библиотека Masonry предоставляет возможность не только выстраивать элементы в сетку с оптимальным заполнением, но и управлять их динамическим добавлением и удалением с плавными анимациями. Один из ключевых аспектов — анимация исчезновения элементов, которая позволяет создавать визуально приятные интерфейсы при удалении карточек или блоков контента.
Для управления анимацией исчезновения Masonry использует CSS
transitions и свойства transition,
opacity и transform. Основная идея заключается
в том, что перед удалением элемента необходимо задать ему состояние, при
котором он постепенно исчезает из DOM.
Пример базового CSS для анимации исчезновения:
.grid-item {
transition: all 0.4s ease;
opacity: 1;
}
.grid-item.removing {
opacity: 0;
transform: scale(0.8);
}
opacity — регулирует прозрачность
элемента.transform: scale(0.8) — уменьшает
размер элемента при исчезновении.transition — задает длительность и
плавность анимации.Удаление элемента в Masonry требует последовательного выполнения нескольких шагов:
layout() для
пересчета сетки.Пример на Jav * aScript:
const grid = document.querySelector('.grid');
const msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
function removeItem(item) {
item.classList.add('removing');
item.addEventListener('transitionend', function handler() {
item.removeEventListener('transitionend', handler);
grid.removeChild(item);
msnry.layout();
});
}
item.classList.add('removing') — инициирует визуальное
исчезновение.transitionend — гарантирует, что элемент удаляется
только после завершения анимации.msnry.layout() — пересчитывает расположение оставшихся
элементов.При удалении нескольких элементов одновременно можно использовать
цикл и применять анимацию каждому элементу. Для более плавного
визуального эффекта рекомендуется задавать небольшие
задержки между элементами с помощью setTimeout или
CSS-свойства transition-delay.
Пример с задержкой:
const itemsToRemove = document.querySelectorAll('.grid-item.to-remove');
itemsToRemove.forEach((item, index) => {
setTimeout(() => removeItem(item), index * 100);
});
index * 100 — задержка 100 мс между исчезновениями
соседних элементов.Для более сложных эффектов исчезновения Masonry может быть комбинирован с библиотеками вроде GSAP или Anime.js. Это позволяет анимировать не только прозрачность и масштаб, но и вращение, смещение, кривые движения.
Пример с GSAP:
function removeItemGSAP(item) {
gsap.to(item, {
duration: 0.5,
opacity: 0,
scale: 0.8,
onComplete: () => {
grid.removeChild(item);
msnry.layout();
}
});
}
gsap.to управляет анимацией элемента.onComplete выполняет удаление и пересчет Masonry после
завершения анимации.msnry.layout() после удаления элемента сетка
может остаться некорректной.transform и opacity, избегая изменения
размеров через width и height.adding и removing с
разными CSS-свойствами позволяет поддерживать симметричные
эффекты входа и выхода элементов.Анимация исчезновения в Masonry делает интерфейсы более динамичными, визуально привлекательными и интуитивными, при этом требует аккуратного управления состояниями элементов и пересчетом сетки.