关于相机的相关内容可以参考:课程 4 - 相机。在 获取 API 后,可以调用相关方法:
ts
api.createLandmark();createLandmark
创建一个代表相机状态的 Landmark
ts
createLandmark(params: Partial<Landmark> = {}): Partial<Landmark>Landmark 包括以下属性:
ts
interface Landmark {
x: number;
y: number;
zoom: number;
viewportX: number;
viewportY: number;
rotation: number;
}gotoLandmark
将相机切换到 Landmark,可以设置平滑过渡的动画参数:
ts
gotoLandmark(
landmark: Partial<Landmark>,
options: Partial<LandmarkAnimationEffectTiming> = {},
) {}参数可以参考 Web Animation API 的 getTiming 方法:
ts
interface LandmarkAnimationEffectTiming {
easing: string;
duration: number;
onframe: (t: number) => void;
onfinish: () => void;
}其中各参数如下:
easing缓动函数。目前仅支持'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out'duration动画持续时间。0代表无动画效果onframe回调函数。动画过程中每一帧都会调用onfinish回调函数。动画结束后调用
zoomTo 等方法都是基于该方法实现的。
cancelLandmarkAnimation
取消进行中的相机动画。
zoomTo
ts
zoomTo(zoom: number, effectTiming?: Partial<LandmarkAnimationEffectTiming>) {}例如将缩放等级设置为 2
ts
api.zoomTo(2);fitToScreen
将全部画布内容组成的包围盒放置在视口中心,保证能容纳全部内容:
ts
fitToScreen(effectTiming?: Partial<LandmarkAnimationEffectTiming>)fillScreen
将全部画布内容组成的包围盒尽可能填充视口,可能无法展示全部内容:
ts
fillScreen(effectTiming?: Partial<LandmarkAnimationEffectTiming>)viewport2Canvas
将 Viewport 坐标系下的点变换到 Canvas 坐标系下。
ts
viewport2Canvas({ x, y }: IPointData): IPointData {}canvas2Viewport
将 Canvas 坐标系下的点变换到 Viewport 坐标系下。
ts
canvas2Viewport({ x, y }: IPointData): IPointData {}例如在实现文本输入框时,需要在指定 Canvas 坐标下放置 <textarea>
ts
// text-editor.ts
const { x, y } = this.api.canvas2Viewport({
x: this.node.x,
y: this.node.y,
});
this.editable.style.left = `${x}px`;
this.editable.style.top = `${y}px`;