Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!20.12.2024
Дев-адвент 20: анімація з Transition
А це — те ж саме, що вчора, тільки зі стандартними переходами (Transition). Та ще й назад вміє!
Так, дійсно, анімацію принципово легше зробити через вбудовані засоби. А саме .animation
- для змін стану, та .transition
- для появи та зникнення елементів. В моєму випадку, оскільки нові шари мапи саме зʼявляються, то тут потрібний .transition
.
Порівняно з React+CSS, мені подобається, що видалений елемент автоматично зберігається аж доки не відпрацює перехід. Просто додаєш/прибираєш елемент з промальовки, та сам запускається перехід. Навіть помітив, що якщо на кінець переходу він не зникає з екрана через прозорість або позицію, то некрасиво зависає ще на пару секунд.
Для конфігурації Transition задається “активний (чомусь) стан”, а насправді стан “неіснування”. От в моєму випадку тег зʼявляється зі своєї позиції в попередньому батьку, тому код переходу виглядає так:
.transition(
.offset(pathElement.offsetOfOriginalPosition)
.combined(with: .scale(pathElement.scaleOfOriginalPosition))
.combined(with: .opacity))
З хорошого — що в основі це працює чудово, навіть без всіх особливих налаштувань. З поганого — що все ж доводиться обчислювати відносне позиціювання та розміри, бо нутрощі мапи я малюю все ще через Canvas
(а кожен рівень навігації є новим Canvas
, з власними вкладеними тегами.) Ну й ще можна полірувати параметри анімації… нескінченно.