Rive Parameters
本页是高级 Rive 类的构造函数选项、类型和实例方法,以及若干其他导出类的参考。如需演练和示例,请使用下面的指南;当你需要精确签名时,再链接回本页。
相关指南
- 入门 — 从这里开始,了解如何将 Rive 加载到你的 Web 应用中
- Artboards — 选择要从
.riv文件加载的 artboard - Layout — 了解如何在 canvas 中布局 Rive 图形,并让它响应尺寸变化
- State machine playback — 处理 Rive 状态机的播放控制
- Loading assets — 处理 Rive 文件的资源加载
- Caching a Rive file —
RiveFile+riveFile,用于多个实例 - Data binding —
autoBind、view model、bindViewModelInstance - Playing audio — 处理音频资源并控制音量级别
Rive 构造函数参数
实例化 Rive 对象时,可以设置以下任意参数:
export interface RiveParameters {
canvas: HTMLCanvasElement | OffscreenCanvas; // required
src?: string; // one of src, buffer, or riveFile is required
buffer?: ArrayBuffer; // one of src, buffer, or riveFile is required
riveFile?: RiveFile; // one of src, buffer, or riveFile is required
artboard?: string;
stateMachines?: string | string[]; // strongly recommended setting this property
layout?: Layout;
autoplay?: boolean;
autoBind?: boolean;
useOffscreenRenderer?: boolean;
enableRiveAssetCDN?: boolean;
shouldDisableRiveListeners?: boolean;
isTouchScrollEnabled?: boolean;
automaticallyHandleEvents?: boolean;
dispatchPointerExit?: boolean;
enableMultiTouch?: boolean;
drawingOptions?: DrawOptimizationOptions;
onLoad?: EventCallback;
onLoadError?: EventCallback;
onPlay?: EventCallback;
onPause?: EventCallback;
onStop?: EventCallback;
onLoop?: EventCallback;
onStateChange?: EventCallback;
onAdvance?: EventCallback;
assetLoader?: AssetLoadCallback;
enablePerfMarks?: boolean;
tabIndex?: number;
focusOptions?: RiveFocusOptions;
// Deprecated parameters
animations?: string | string[]; // deprecated in favor of stateMachines
}
canvas- (必需) 提供一个用于绘制 Rive 动画的<canvas>元素。- 要加载
.riv文件,必须提供以下其中一项:src- (可选) 指向.riv文件的托管 URL 或应用相对的公共路径。最小示例请参阅入门指南。buffer- (可选).riv字节的ArrayBuffer。riveFile- (可选) 提供一个可跨实例复用的已加载RiveFile。更多详情请参阅 Caching a Rive file。
artboard- (可选) 要使用的 artboard 名称。如果未提供,将从导出的.riv文件中获取默认 artboard。stateMachines- (强烈建议) 要从.riv文件加载的状态机名称(例如"State Machine 1")。如果未提供,目前 Rive 会获取它找到的第一个线性动画(已弃用的行为)。在运行时的下一个主要版本中,Rive 将默认获取 artboard 上的默认状态机。
注意:你应该只为 stateMachines 提供单个状态机字符串。同时运行同一个 artboard 的多个状态机可能会导致意外后果。
layout- (可选) 提供一个new Layout()实例。有关适配模式、对齐、边界和响应式布局,请参阅该指南。autoplay- (可选) 如果为 true,动画将在加载后自动开始播放。默认为 false。autoBind- (可选) 设置为true时,Rive 会自动查找默认 view model 和 view model instance,并将其绑定到 artboard。默认为 false。useOffscreenRenderer- (可选) 布尔标志,用于确定是否使用共享的离屏 WebGL2 上下文,而不是为此 Rive 实例创建自己的 WebGL2 上下文。这仅与基于 WebGL 的运行时相关,例如@rive-app/webgl2。如果你在一个页面上显示多个 Rive 实例,强烈建议将此标志设置为true。默认为false。enableRiveAssetCDN- (可选) 允许运行时自动加载托管在 Rive CDN 中的资源(例如字体)。默认为 true。shouldDisableRiveListeners- (可选) 布尔标志,用于禁止在<canvas>元素上设置 Rive Listeners,从而阻止在该元素上设置任何事件监听器。- 注意: 默认情况下,如果没有正在播放的状态机,或者状态机上没有设置任何 Rive Listeners,则不会在
<canvas>元素上设置 Rive Listeners。
- 注意: 默认情况下,如果没有正在播放的状态机,或者状态机上没有设置任何 Rive Listeners,则不会在
isTouchScrollEnabled- (可选) 对于 Rive Listeners,允许在支持触摸的设备上对 canvas 元素执行触摸/拖拽操作时仍然发生滚动行为。否则,默认情况下,在 canvas 上执行触摸/拖拽操作时,滚动行为可能会被阻止。automaticallyHandleEvents- (可选) 启用由运行时处理 Rive Events。这意味着任何特殊的 Rive Event 都可能隐式地产生副作用。例如,如果在渲染循环期间检测到OpenUrlEvent,浏览器可能会尝试打开 payload 中指定的 URL。此标志默认为false,以防止发生任何非预期行为。这意味着任何特殊的 Rive Event 都必须通过订阅EventType.RiveEvent手动处理。dispatchPointerExit- (可选) 对于 Rive Listeners,当指针离开 canvas 时分发 pointer exit 事件。这有助于确保当用户光标离开 canvas 区域时,hover 状态能够正确重置。默认为 true。enableMultiTouch- (可选) 为 Rive Listeners 启用多点触控支持。启用后,运行时会在支持触摸的设备上跟踪并响应多个同时发生的触摸点。默认为 false。drawingOptions- (可选) 一个枚举(DrawOptimizationOptions),提供绘制优化选项。可用于配置渲染性能优化。默认值为DrawOptimizationOptions.DrawOnChanged,仅当 artboard 发生视觉更新时才会提交绘制命令。DrawOptimizationOptions.DrawOnChanged- 仅当 artboard 发生视觉更新时提交绘制命令DrawOptimizationOptions.AlwaysDraw- 始终提交绘制命令,即使 artboard 没有发生视觉更新。
onLoad- (可选) 当 .riv 文件加载完成时触发的回调。onLoadError- (可选) 当加载 .riv 文件时发生错误时触发的回调。onPlay- (可选) 当动画开始播放时触发的回调。onPause- (可选) 当动画暂停时触发的回调。onStop- (可选) 当动画停止时触发的回调。onLoop- (可选) 当动画完成一次循环时触发的回调。onStateChange- (可选) 当发生状态变化时触发的回调。onAdvance- (可选) 当 Artboard 在每一帧推进时触发的回调。assetLoader- (可选) 用于加载资源的回调。完整模式和示例请见 loading assets 指南。enablePerfMarks- (可选) 为关键 Rive 启动和渲染事件发出performance.mark/performance.measure条目,用于性能分析。默认为 false。也可在RuntimeLoader和RiveFile上使用。tabIndex- (可选) canvas 元素的 tab index。用于为焦点管理指定 tab index。或者,你也可以直接在<canvas>上设置tabindex属性。focusOptions- (可选) 焦点管理选项。allowFocusInterrupt- (可选) 如果 Rive 内部检测到焦点变化,则允许中断浏览器焦点并将焦点设置到 Rive canvas 上。默认为 false。
已弃用参数
animations- (可选) 已弃用,请改用stateMachines。要从.riv文件加载的单个时间线动画名称。如果未提供,Rive 将获取它找到的第一个线性动画。在运行时的下一个主要版本中,Rive 将默认获取 artboard 上的默认状态机。
APIs
构造完成后,Rive 实例上可使用以下 API。
数据绑定(View Models)
Rive 上的 view model API 在数据绑定指南中有深入说明。有关 Rive 实例上可用 API 的快速参考,请见下文:
viewModelInstance(getter)— 当前绑定的实例(如果有)。当autoBind为true且存在可引用的默认 View Model instance 时,此属性可用。通过实例,你可以根据类型获取 view model 属性的引用:.number(path: string): ViewModelInstanceNumber.boolean(path: string): ViewModelInstanceBoolean.string(path: string): ViewModelInstanceString.color(path: string): ViewModelInstanceColor.trigger(path: string): ViewModelInstanceTrigger.enum(path: string): ViewModelInstanceEnum.list(path: string): ViewModelInstanceList.image(path: string): ViewModelInstanceAssetImage.font(path: string): ViewModelInstanceAssetFont.artboard(path: string): ViewModelInstanceArtboard.viewModel(path: string): ViewModelInstance.viewModelName- Getter 属性,用于返回创建该实例所基于的ViewModel的名称.properties- Getter 属性,用于返回此ViewModel上可用的属性列表
viewModelCount(getter)viewModelByIndex(index: number): ViewModel | null- 返回.riv文件中由索引指定的ViewModel;如果不存在或文件尚未加载,则返回 nullviewModelByName(name: string): ViewModel | null- 返回由名称指定的ViewModel;如果不存在或文件尚未加载,则返回 nulldefaultViewModel(): ViewModel | null- 返回文件的默认ViewModel;如果不存在或文件尚未加载,则返回 nullbindViewModelInstance(instance: ViewModelInstance | null): void- 设置并绑定主ViewModelInstance到状态机。请注意,如果autoBind为true,这会自动完成。setViewModelInstance(instance: ViewModelInstance | null): void- 设置主ViewModelInstance到状态机,但不绑定。调用bind()来应用此更改。setGlobalViewModelInstance(name: string, instance: ViewModelInstance): boolean- 设置(或替换)占用名为name的全局视 图模型槽位的ViewModelInstance,但不绑定。调用bind()来应用此更改。如果name与文件中的全局视图模型不匹配,则返回false。globalViewModelInstance(name: string): ViewModelInstance | null- 返回当前占用指定全局视图模型槽位的ViewModelInstance;如果尚未设置或创建,则返回null。这是纯读取操作——它不会创建实例。globalViewModelNames(): string[]- 文件的全局视图模型名称列表,按文件顺序排列。与setGlobalViewModelInstance()/globalViewModelInstance()配合使用。bind(): void- 将已设置的主ViewModelInstance和全局ViewModelInstance应用到状态机。当状态机运行时,如果尚未设置,它还会为文件中的主视图模型和全局视图模型创建默认实例。如果autoBind为true,这会自动完成。enums(): DataEnum[]- 文件中定义的枚举列表getBindableArtboard(name: string): BindableArtboard | null- 返回一个命名 artboard,类型为BindableArtboard,它会暴露数据绑定 API。获得 bindable artboard 后,你可以在该 artboard 上设置.viewModel属性,以绑定ViewModelInstance。Bindable artboard 可以作为值设置到另一个 ViewModel 上的 artboard 属性。如果 artboard 不存在或文件尚未加载,则返回null。getDefaultBindableArtboard(): BindableArtboard | null- 返回文件的默认 artboard,类型为BindableArtboard;如果不可用,则返回null。
播放
示例和面向 UX 的讨论:State machine playback。
play()
play(names?: string | string[], autoplay?: true): void
通过传入的名称播放指定状态机。如果你已经以编程方式调用了 pause() 或 stop(),或者在实例化 Rive 时设置了 autoplay: false,这会很有用。如果未传入名称,则会播放所有已实例化的状态机(如果未实例化状态机,则播放默认线性动画)。
pause()
pause(names?: string | string[]): void
通过传入的名称暂停指定状态机。如果未传入名称,则会暂停所有已实例化的时间线动画或状态机。
stop()
stop(names?: string | string[]): void
通过传入的名称停止指定状态机。如果未传入名称,则会停止所有已实例化的时间线动画或状态机。
reset()
interface RiveResetParameters {
artboard?: string;
animations?: string | string[];
stateMachines?: string | string[];
autoplay?: boolean;
autoBind?: boolean;
}
reset(params?: RiveResetParameters): void
从起始位置(或 entry state)重置 artboard、时间线动画和/或状态机。会先清理现有的 artboard/animation/state machine 实例。重置后的播放行为遵循 autoplay 和 autoBind(含义与构造函数参数相同)。示例:State machine playback。
画布尺寸和布局
使用这些 API 来响应画布或窗口尺寸变化,确保 Rive 内容能够清晰地缩放和渲染。
resizeDrawingSurfaceToCanvas()
resizeDrawingSurfaceToCanvas(customDevicePixelRatio?: number): void
根据 canvas 元素的 CSS 布局尺寸和设备像素比(或你可选传入的 customDevicePixelRatio)设置 canvas 元素的 width 和 height。这可以减少高 DPI 显示器上的模糊。会调用 resizeToCanvas() 并更新 devicePixelRatioUsed。如果 layout.fit 设置为 Fit.Layout,则会根据布局调整 artboard 的宽度/高度。
在此运行时未来的主版本中,该 API 可能会在初始化时默认在内部调用,并提供一个可选择退出的选项,以便你在需要时为 canvas 设置特定的 width 和 height 属性。
用法示例请参阅 layout 指南。
resizeToCanvas()
resizeToCanvas(): void
根据当前 canvas 的像素宽度和高度设置布局边界(minX、minY、maxX、maxY)。当 canvas 后备存储尺寸发生变化时调用。
resetArtboardSize()
resetArtboardSize(): void
将 artboard 尺寸恢复为文件中的原始值。
devicePixelRatioUsed
用于获取/设置在调整绘图表面尺寸时应用的设备像素比(DPR)值(由 resizeDrawingSurfaceToCanvas() 更新)。
bounds
Artboard 的轴对齐边界;如果 artboard 尚未就绪,则为 undefined。
layout(get/set)
获取此属性会返回当前的 Layout 实例(请将其视为不可变;使用 new Layout({...}) 或 copyWith 进行更改)。设置此属性会替换布局。示例:Layout。
artboardWidth / artboardHeight
逻辑 artboard 尺寸的 getter/setter。如果 artboard 尚未加载且你没有设置值,可能会看到 0。
当使用 resizeDrawingSurfaceToCanvas() 并配合 Fit.Layout 时,避免手动设置这些值,因为运行时会根据 canvas 设置宽度/高度。
音频
volume
Artboard 音频音量的 getter/setter。默认值为 1.0,表示音量由该 artboard 的默认级别决定。
有关控制音量级别的更多详情,请参阅 playing audio 指南。
事件
除了可以在 Rive 构造函数中设置的事件回调(即 onLoad)之外,你还可以使用 on 和 off 方法订阅事件,以便更精细地控制 Rive 事件订阅。
on()
on(type: EventType, callback: EventCallback): void
订阅运行时事件(类似于 addEventListener)。
off()
off(type: EventType, callback: EventCallback): void
使用传递给 on() 的相同 EventType 和回调引用取消订阅。
removeAllRiveEventListeners()
removeAllRiveEventListeners(type?: EventType): void
移除指定 EventType 的所有监听器;如果省略 type,则移除所有类型的监听器。
事件类型和载荷
export enum EventType {
Load = "load",
LoadError = "loaderror",
Play = "play",
Pause = "pause",
Stop = "stop",
Loop = "loop", // Only applicable for timeline animations, not state machines
Advance = "advance", // Called each frame after state machine advance
StateChange = "statechange",
RiveEvent = "riveevent",
}
Event 类型为 { type: EventType; data?: ... }。data 的形状取决于 type:
- Load —
RiveFile(已加载的文件句柄)或字符串 "buffer",表示从 ArrayBuffer 加载 - LoadError —
string(错误消息) - Play、Pause、Stop —
string[](受影响的动画或状态机名称) - Loop —
LoopEvent({ animation: string; type: LoopType })。LoopType为OneShot、Loop或PingPong。 - Advance —
number(该帧经过的秒数) - StateChange —
string[](发生变化的状态名称) - RiveEvent — 自定义或内置 Rive 事件载荷(例如打开 URL 事件)
有关 EventType.RiveEvent 监听器示例,请参阅 Rive Events。对于新工作,在适用的情况下优先使用 Data binding。
文件和生命周期
当使用 Rive 加载不同的 Rive 内容,或在不再需要 Rive 时清理资源时,以下 API 可能会有帮助。
load()
interface RiveLoadParameters {
src?: string;
buffer?: ArrayBuffer;
riveFile?: RiveFile;
autoplay?: boolean;
autoBind?: boolean;
artboard?: string;
animations?: string | string[];
stateMachines?: string | string[];
useOffscreenRenderer?: boolean;
shouldDisableRiveListeners?: boolean;
tabIndex?: number;
}
load(params: RiveLoadParameters): void
替换当前 .riv 源并重新初始化实例。这也会停止当前播放,并清除先前的文件引用。重置时必须提供 src、buffer 或 riveFile 之一(与构造函数规则相同)。WASM 通常已经加载,因此如果你指向一个新的托管 .riv 位置,通常只需要承担网络成本。
cleanup()
cleanup(): void
停止渲染循环,并释放 artboard、动画、状态机、渲染器、文件句柄、监听器以及视图模型实例引用。当不再需要 Rive 实例时调用,以避免内存泄漏。
cleanupInstances()
cleanupInstances(): void
仅释放 artboard、时间轴动画和状态机实例。文件和渲染器保持有效,因此你可以切换 artboard,或通过 reset() / load() 重新初始化。
deleteRiveRenderer()
deleteRiveRenderer(): void
删除底层渲染器对象,释放 GPU/WebGL 资源。只有在 cleanup() 之后需要完全拆除时才调用此方法——例如,当从 DOM 中完全移除 WebGL canvas 时。在大多数情况下,仅调用 cleanup() 就足够了。
渲染循环
stopRendering()
stopRendering(): void
停止调度帧。不会改变动画的播放/暂停/停止状态。可使用 startRendering() 恢复。这在 <canvas> 不可见的场景中很有用。
startRendering()
startRendering(): void
如果渲染循环曾通过 stopRendering() 停止,则启动渲染循环。如果已经在运行,则不执行任何操作。
drawFrame()
drawFrame(): void
推进并绘制一帧。当你在某些更新后需要显式绘制时可使用此方法,但通常不需要手动调用此 API。
resolveAnimationFrame()
这不是高级 Rive 类上的方法,而是在从头构建渲染循环时供低级 API 使用的方法。在已加载的 RiveCanvas(@rive-app/canvas-advanced / @rive-app/webgl2-advanced)上,当你自己使用浏览器的 requestAnimationFrame 时,请在绘制后调用 rive.resolveAnimationFrame()。高级 Rive 实例则使用 drawFrame() 及其内 部循环。完整循环示例:Low-level API — Integrating Rive into Existing rAF Loop。
Rive 监听器
在大多数情况下,监听器会在实例化期间自动设置和处理。更多详情请参阅关于 Rive listeners 的指南。 如果你需要精确控制 Rive 如何拦截 canvas 上的输入事件,可以使用以下 API。
setupRiveListeners()
setupRiveListeners(options?: { isTouchScrollEnabled?: boolean }): void
在 canvas 上为使用 Rive Listeners 的活动状态机(重新)附加指针/触摸监听器。在适当时会自动调用;如果动态更改后必须刷新监听器,请使用此方法。可选的 isTouchScrollEnabled 会仅针对本次设置覆盖实例默认值。
removeRiveListeners()
removeRiveListeners(): void
移除安装在 canvas 上的 Rive Listeners 监听器回调。
已弃用
以下 Rive 实例上的 API 已弃用。它们可能仍然可用,但为 了让你的 Rive 图形面向未来,我们建议迁移 away from 这些模式。
直接设置状态机输入和文本运行已弃用。对于新工作,在可能的情况下请使用 Data binding。
stateMachineInputs()
stateMachineInputs(stateMachineName: string): StateMachineInput[] | undefined
返回具有给定名称的已实例化状态机的输入;如果文件尚未加载,则返回 undefined。关于获取/设置值以及触发 trigger 输入,请参阅下面的接口。
export enum StateMachineInputType {
Number = 56,
Trigger = 58,
Boolean = 59,
}
class StateMachineInput {
public readonly type: StateMachineInputType;
public get name(): string;
public get value(): number | boolean;
public set value(value: number | boolean);
public fire(): void; // trigger inputs only
public delete(): void; // clears the wrapper’s reference to the native input
}