跳转到内容

插件系统

Rinne 的核心极其精简,只负责纯数值的 SoA 计算。通过插件系统,Rinne 可以处理复杂的 DOM 属性、颜色转换和向量数组。

Rinne 在初始化时会自动注册以下常用插件:

  • DOM 插件:处理 CSS 属性、Transform 合并及单位转换。
  • 颜色插件:处理 Hex, RGB, RGBA 颜色插值。
  • 向量插件:处理数组(Array)类型的属性(如 Three.js 的 position)。

如果你需要使用自定义插件,或者在某些特殊环境下需要手动管理插件,可以使用 registerPlugin 方法。

import { rinne } from '@shxnovel/rinne';
import { MyCustomPlugin } from './MyCustomPlugin';
// 手动注册插件
rinne.registerPlugin(MyCustomPlugin);

注意:Rinne 默认已经注册了内置插件。如果你调用了 rinne.purge(),引擎会重置状态并自动重新加载这些默认插件。


一个 Rinne 插件是一个实现了 RinnePlugin 接口的对象。你可以根据需要开发自己的插件来支持 PixiJS, Babylon.js 等第三方库。

export interface RinnePlugin {
name: string;
// 测试当前属性是否该由本插件处理。返回 true 表示本插件感兴趣。
test: (target: any, key: string, value: any) => boolean;
// 处理逻辑。返回 true 表示接管该属性,引擎将不再尝试其他插件或默认逻辑。
onTo: (
engine: Rinne | RinneTimeline,
core: RinneCore,
target: any,
key: string,
value: any,
config: RinneTweenConfig,
isAdditive: boolean
) => boolean;
}
const MyLogPlugin = {
name: 'LogPlugin',
test: (target, key) => key === 'debug',
onTo: (engine, core, target, key, value) => {
console.log(`Animating ${key} to ${value}`);
return false; // 仅做记录,不拦截后续逻辑
}
};
rinne.registerPlugin(MyLogPlugin);