Web (JS)
Rive 的 JavaScript/WASM 运行时。
概述(Overview)
本指南介绍如何开始使用 Rive web 运行时库。该运行时是开源的,可在此 GitHub 仓库中获取。该库提供了高级 JavaScript API(支持 TypeScript)和低级 API,让您可以自行加载 Web Assembly(WASM)并控制渲染循环。这个运行时允许您:
- 快速将 Rive 集成到所有 web 应用程序中(如 Webflow、WordPress 等)
- 提供基础 API 来构建其他基于 web 的 Rive 运行时包装器(如 React、Angular 等)
- 通过控制渲染循环来支持高级用例(如基于 web 的游戏引擎)
快速开始(Quick Start)
查看我们的快速开始示例。
此示例仅演示了以各种方式加载
.riv文件资源和创建 Rive 实例。其他部分详细介绍了更高级的用例。
入门指南(Getting Started)
按照以下步骤将 Rive 集成到您的 web 应用中。
以下说明描述了使用
@rive-app/canvas包。Rive 提供了基于 web 的包,如 WebGL、Canvas 和 Lite 版本。查看本节以了解哪个包最适合您的用例。
1. 安装依赖(Install the dependency)
我们建议始终使用最新版本。下面列出的版本和示例中的版本可能与最新版本不同。
脚本标签(Script Tag)
将以下脚本标签添加到您的网页以获取最新版本:
<script src="https://unpkg.com/@rive-app/canvas"></script>
您也可以固定到特定版本(查看这里获取最新版本):
<script src="https://unpkg.com/@rive-app/[email protected]"></script>
这将使全局 rive 对象可用,允许您通过 rive 入口点访问 Rive API:
new rive.Rive({});
包管理器(Package Managers)
1. npm
npm install @rive-app/canvas
2. pnpm
pnpm add @rive-app/canvas
3. yarn
yarn add @rive-app/canvas
4. bun
bun add @rive-app/canvas
导入(Importing)
// 将整个模块导入到全局标识符 `rive` 下
import * as rive from "@rive-app/canvas";
// 或者,只导入您需要的特定部分
import { Rive } from "@rive-app/canvas";
没有使用 Rive 文本和 Rive 音频?考虑使用 @rive-app/canvas-lite,这是一个更小的包变体。
2. 创建画布(Create a Canvas)
在您的 HTML 中添加一个画布元素,用于显示 Rive 图形:
<canvas id="canvas" width="500" height="500"></canvas>
3. 创建 Rive 实例(Create a Rive instance)
要创建新的 Rive 对象实例,需要提供以下属性:
src:表示托管的.riv文件 URL 的字符串(如下例所示)或公共资源.riv文件的路径。有关如何正确使用此属性的更多详细信息,请参阅 Rive 参数。artboard:(可选)表示您想要显示的画板的字符串。如果未提供,则选择默认画板。stateMachines:表示您想要播放的状态机名称的字符串。canvas:动画将在其中渲染的画布元素。autoplay:布尔值,指示动画是否应自动播放。
<script>
const r = new rive.Rive({
src: "https://cdn.rive.app/animations/vehicles.riv",
// 或者公共 Rive 资源的路径
// src: '/public/example.riv',
canvas: document.getElementById("canvas"),
autoplay: true,
// artboard: "Arboard", // 可选。如果未提供则选择默认画板
stateMachines: "bumpy",
onLoad: () => {
r.resizeDrawingSurfaceToCanvas();
},
});
</script>
resizeDrawingSurfaceToCanvas方法确保 Rive 动画正确缩放以适应指定画布元素的尺寸。默认情况下,画布渲染表面可能与 HTML 中定义的<canvas>元素的确切大小不匹配,这可能导致图形模糊或缩放不正确,特别是在高 DPI 或视网膜显示器上。调用此方法会调整内部绘图表面,使动画以清晰的细节渲染,匹配画布的像素密度。这在以下情况下特别重要:
- 画布大小动态变化时(例如,由于响应式布局而调整大小)。
- 您希望确保动画保持清晰,无论设备或屏幕分辨率如何。
最佳实践:
- 加载后调用:建议在
onLoad回调内调用resizeDrawingSurfaceToCanvas,以确保在调整绘图表面之前完全加载 Rive 资源。这可以防止任何渲染问题。- 处理窗口调整大小:如果您的画布大小在用户交互期间发生变化(例如调整浏览器窗口 大小时),您还应该监听窗口调整大小事件并调用
resizeDrawingSurfaceToCanvas来重新调整渲染表面:window.addEventListener("resize", () => {
r.resizeDrawingSurfaceToCanvas();
});这样,当画布大小改变时,Rive 动画将继续保持清晰和正确的缩放。
完整示例(Complete example)
将所有内容整合在一起,以下是在单个 HTML 文件中加载 Rive 图形的方法。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Rive Hello World</title>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script src="https://unpkg.com/@rive-app/canvas"></script>
<script>
const r = new rive.Rive({
src: "https://cdn.rive.app/animations/vehicles.riv",
canvas: document.getElementById("canvas"),
autoplay: true,
// artboard: "Arboard", // 可选。如果未提供则选择默认画板
stateMachines: "bumpy",
onLoad: () => {
// 确保绘图表面匹配画布大小和设备像素比
r.resizeDrawingSurfaceToCanvas();
},
});
</script>
</body>
</html>
加载 Rive 文件(Loading Rive files)
查看此示例了解加载 .riv 文件的不同方式,选项包括:
- 托管 URL(Hosted URL):使用表示
.riv文件托管位置的 URL 字符串。创建新的 Rive 实例时将其设置为src属性。 - 包中的静态资源(Static Assets in the bundle):提供一个指向 web 项目中可公开访问的
.riv文件路径的字符串。像处理其他静态资源(如图像或字体)一样处理.riv文件。 - 获取文件(Fetching a file):不使用
src属性,而是在获取 文件时使用buffer属性来加载ArrayBuffer。这在跨多个 Rive 实例重用相同的.riv文件时很有用,允许您只加载一次。 - 重用已加载的文件(Reusing a Loaded File):使用
rivFile参数重用先前加载的 Rive 运行时文件对象,避免通过srcURL 再次获取或从buffer重新加载。这可以通过消除冗余的网络请求和加载时间来显著提高性能,特别是在从相同源创建多个 Rive 实例时。与需要在底层解析以创建运行时文件对象的src和buffer参数不同,riveFile参数使用已解析的对象,包括任何已加载的资源。参见缓存 Rive 文件。
有关更多详细信息,请参阅 Rive 参数部分中关于 src 属性的说明。
其他 Rive web 资源(Additional Rive web resources)
更深入的 Rive web 文档和高级用例。
- Rive 参数
- Rive 实例的 API 文档
- Canvas vs WebGL
- 不同 Rive web 包的指南
- 常见问题
- 常见问题解答
- 预加载 WASM
- 如何预加载和自托管 rive WASM 库的说明
- 低级 API 使用
- 控制 Rive 渲染循环和布局,以及在同一画布上绘制多个画板