指南 · 05

进场、离场与布局

保留离开的子元素直到动效结束,并为位置和尺寸变化添加动画,甚至跨组件。

Animated.Keep

Animated.Keep 会保留带 key 的直接子元素,直到它们的 depart 姿态结束。seed={false} 让首次渲染时已存在的子元素直接从其 pose 开始,wait 会让进入的子元素等到离开动画结束,onDeparted 在最后一个离开后触发。

正在准备示例…

Animated.Scene 与 move

Animated.Scene 测量已提交的布局。带 move 的元素会为其位置和尺寸的变化添加动画;move="pill" 这样的字符串会在 Scene 内连接具有相同标识的元素,即使一个被卸载、另一个被挂载。

这些元素布局上的 translate 和 scale 由 Scene 掌管,所以请把你自己的 transform 放在嵌套的元素上。

正在准备示例…

用 Hook 控制出现与消失

如果你更愿意自己控制挂载,useAnimatedPresence(visible, { enter, exit }) 会返回 { mounted, animatedValue }。

Toast.jsx
const { mounted, animatedValue } = useAnimatedPresence(open, {
  enter: (value) => spring(value, { toValue: 1 }),
  exit: (value) => timing(value, { toValue: 0, duration: 180 }),
});

return mounted ? <div style={{ opacity: animatedValue }}>Saved</div> : null;

在 React 之外

createLayoutScene 为任何渲染器或手动 DOM 修改提供同样的捕获/提交协调。

outside-react.js
const scene = createLayoutScene({ tempo: { spring: { stiffness: 320, damping: 30 } } });
const card = scene.attach(element, { key: 'card' });

scene.capture(); // before the DOM changes
list.prepend(element); // any renderer or manual DOM work
scene.commit(); // animates from the captured rectangles

搜索

输入关键词搜索文档。