Skip to content

Hooks

本页列出 React Motion 提供的核心 Hooks。

useMotion

用途:关键帧动画 Hook,按关键帧推进并输出可直接使用的 style

签名(概念)

useMotion‹T extends UiRenderable›(options: UseMotionOptions‹T›)

返回值

返回值类型说明
stylePartial‹T›当前时刻计算出的样式/属性,直接合并进组件 style 即可
motionUseMotionController控制器:播放/暂停/重置/定位等(兼容 MotionController 最小接口)

参数(UseMotionOptions‹T›)

参数类型(概念)默认值说明
toMotionKeyframe‹T›[]-关键帧数组,每段包含 value/duration/ease
delaynumber0起播延迟(ms)
speednumber1速度倍率(> 0)
autoPlaybooleantrue是否自动播放
drivenProgressnumber | undefined-外部驱动进度(0~1)。传入后内部不再自动计时推进
loopnumber | "infinite"0循环次数;"infinite" 表示无限循环
yoyobooleanfalse是否往返播放(A->B->A)
onStart() =› void-第一次开始播放时触发
onUpdate(payload) =› void-每次样式更新时触发(见下方 payload)
onComplete() =› void-自然播放结束且不再循环时触发

onUpdate(payload)

字段类型(概念)说明
progressnumber当前进度(0~1)
stylePartial‹T›当前时刻计算出的样式

相关类型

EasingFn

类型说明
(t: number) => numbert 为归一化进度(0~1),返回缓动后的进度(0~1)

EasingName:内置缓动预设名称。

'linear' | 'sineIn' | 'sineOut' | 'sineInOut' | 'smoothstep' | 'smootherstep' | 'easeInOut' | 'easeIn' | 'easeOut' | 'quadIn' | 'quadOut' | 'quadInOut' | 'cubicIn' | 'cubicOut' | 'cubicInOut' | 'quartIn' | 'quartOut' | 'quartInOut' | 'quintIn' | 'quintOut' | 'quintInOut' | 'expoIn' | 'expoOut' | 'expoInOut' | 'circIn' | 'circOut' | 'circInOut' | 'backIn' | 'backOut' | 'backInOut' | 'bounceIn' | 'bounceOut' | 'bounceInOut' | 'springIn' | 'springOut' | 'springInOut' | 'elasticIn' | 'elasticOut' | 'elasticInOut'

在关键帧里填 ease 时,可以传入预设名(EasingName)或自定义 EasingFn

OffsetScaleConfig:用于 position/size 字段的偏移与缩放配置。

字段类型说明
offsetVec2尺寸偏移量
scaleVec2尺寸缩放比例(0~1)

MotionKeyframeValue‹T›:关键帧的 value 类型(只对传入字段做动画)。

  • position?: OffsetScaleConfig
  • size?: OffsetScaleConfig
  • 其余字段:Partial<T>(但不包含 position/size 原始字段)

MotionKeyframe‹T›:单个关键帧。

字段类型(概念)说明
valueMotionKeyframeValue‹T›部分样式对象;只会对传入的字段做动画
durationnumber该段动画的持续时间(ms)
easeEasingName | EasingFn可传预设名或自定义缓动函数

控制器(UseMotionController)方法

方法返回值说明
play()MotionPlayHandle开始或继续播放,返回可取消句柄与 finished
reverse(dir)void设置播放方向:1 正向,-1 反向
pause()void暂停
reset()void重置(回到初始状态/进度)
setProgress(p)void设置整体进度(0~1)
seekToSegment(i)void跳到第 index 段片段的起点

控制器(UseMotionController)状态字段(常用)

字段类型说明
isPlayingboolean是否正在播放
progressnumber当前整体进度(0~1)
directionnumber当前方向:1 正向,-1 反向

MotionPlayHandle

字段/方法类型(概念)说明
cancel()() =› void取消本次播放
finishedPromise‹{ reason: 'finished' | 'cancelled' | 'reset' }›播放自然结束/取消/reset 时 resolve,并给出原因

说明MotionControlleruseMotionOrchestrator 所需的最小控制器接口(包含 play/pause/reset/setProgress)。useMotion 返回的控制器是 UseMotionController(更完整)。

useTimeline

用途:时间轴 Hook,输出 0~1 的 progress,可用于驱动 useMotion 或自行插值。

签名(概念)

useTimeline(options: UseTimelineOptions)

返回值

返回值类型说明
progressnumber时间轴进度(0~1)
controllerTimelineController控制器:播放/暂停/重置/定位等

参数(UseTimelineOptions)

参数类型(概念)默认值说明
durationnumber-总时长(ms)
delaynumber0延迟启动(ms)
autoPlaybooleantrue是否自动播放
loopboolean | number | "infinite"0循环次数;"infinite" 表示无限循环
yoyobooleanfalse是否往返播放

控制器(TimelineController)方法

方法返回值说明
play()void开始或继续播放
pause()void暂停
reset()void重置到起始状态,并停止播放
seekTo(p)void跳转到指定进度(0~1),不会自动播放

控制器(TimelineController)状态字段(常用)

字段类型说明
isPlayingboolean是否正在播放
progressnumber当前进度(0~1)
directionnumber当前方向:1 正向,-1 反向(yoyo 时会切换)

useMotionOrchestrator

用途:多动画编排,统一调度多个 useMotion 的控制器。

签名(概念)

useMotionOrchestrator(controllers: MotionController[])

参数

参数类型说明
controllersMotionController[]由多个 useMotion 返回的控制器组成

常用方法

方法参数返回值说明
parallel()-MotionPlayHandle并行播放所有 motion
sequence()-MotionPlayHandle串行播放(一个接一个)
stagger(gapMs)numberMotionPlayHandle错峰播放:每个 motion 延迟 gapMs 开始
pauseAll()-void暂停所有 motion
resetAll()-void重置所有 motion

神岛实验室