用途
该技能用于生成 React Native Reanimated 的动画代码,适用于在 React Native 应用中创建、实现或添加动画的场景。它支持 Reanimated v3 与 v4,并可根据项目 package.json 判断版本。
主要能力
- 版本检测:v4 仅支持新架构,需单独依赖 react-native-worklets;v3 兼容旧架构与新架构,单包安装。
- 核心动画模式:通过 useSharedValue 创建运行在 UI 线程的共享值,用 useAnimatedStyle 绑定样式,并通过赋值触发动画。
- 动画函数选择:withTiming(固定时长过渡)、withSpring(弹性效果)、withDecay(惯性滚动)、withClamp(v4 限定弹簧范围)、withRepeat(循环/脉冲/抖动)、withSequence(多步编排)、withDelay(延迟启动)。
- 常用模式:淡入淡出、侧滑进入、按压缩放、使用 interpolate 与 Extrapolation.CLAMP 做插值。
- 滚动联动:useAnimatedScrollHandler 或 useScrollOffset(v4)/useScrollViewOffset(v3)。
- 布局动画:内置 FadeIn、SlideInRight、SlideOutLeft 等进出场预设,支持 duration、delay、springify、damping、stiffness 等修饰符。
- 布局过渡:LinearTransition、SequencedTransition、FadingTransition、JumpingTransition、CurvedTransition、EntryExitTransition 等。
- 关键帧动画:使用 Keyframe 定义复杂进出场。
- v4 的 CSS 动画与 CSS 过渡:通过 style 属性声明 animationName、animationDuration、transitionProperty、transitionDuration 等。
- 共享元素过渡(实验性):通过 sharedTransitionTag 在页面间共享元素,需 @react-navigation/native-stack 与特性开关。
- 手势集成:拖拽、捏合、甩动等手势驱动动画,需 react-native-gesture-handler 与 GestureHandlerRootView。
- 进阶参考:worklets、runOnJS/runOnUI、useAnimatedReaction、useFrameCallback、measure、dispatchCommand 等。
- 实战组件模式:手风琴、底部弹层、翻卡、悬浮按钮。
- 测试与属性:Jest 测试动画、interpolateColor、各平台可动画属性列表。
使用方式
通过该技能生成代码时,先根据 package.json 判断版本并按对应方式安装与配置 Babel 插件。v4 安装 react-native-reanimated react-native-worklets,Babel 插件为 react-native-worklets/plugin 且必须位于插件列表末尾,Expo 无需 Babel 配置但安装后需运行 npx expo prebuild;v3 安装 react-native-reanimated,Babel 插件为 react-native-reanimated/plugin 且必须位于插件列表末尾。动画代码遵循创建共享值、绑定样式、触发动画三步。
适用场景与限制
适用于 React Native 应用中的各类动画实现,包括进入退出、布局变化、滚动联动、手势交互与页面共享元素。限制与约束包括:始终使用 Animated.View/Text/Image/ScrollView/FlatList,不能对普通 RN 组件做动画;v4 使用 runOnJS/runOnUI 或从 react-native-worklets 导入 scheduleOnRN/scheduleOnUI,v3 使用 runOnJS(fn)() 处理繁重的 JS 线程逻辑;interpolate 默认应配合 Extrapolation.CLAMP;使用 useReducedMotion() 尊重无障碍设置;动画性能应在真机测试,模拟器差异明显;v4 中 useAnimatedKeyboard 已废弃,改用 react-native-keyboard-controller。