简体中文
主题
简体中文
主题
本页描述合辑页运行时可用的高级 API。
iframe.addEventListener('ready', (event) => {
const api = event.detail.api;
const collectionInfo = event.detail.collectionInfo;
});此时 event.detail.api 为 CollectionApi,用于控制合辑整体流程。
iframe.addEventListener('sceneReady', (event) => {
const api = event.detail.api;
const sceneInfo = event.detail.sceneInfo;
});此时 event.detail.api 为 SceneApi,和单独打开场景时拿到的场景高级 API 一致。
当前这套 API 主要适用于合辑页面。
它负责:
它不负责直接操作场景中的对象、模型、视频、灯光等内容。
如果你需要在合辑中进一步控制某个场景的运行时内容,应等待 sceneReady 事件,再使用其中的 SceneApi。
await api.openScene('7A43keFojH0v98xvFP2w52aF8Y67Zbb5');
await api.closeCurrentScene();即便某些方法最终只是触发一个流程切换,也推荐统一使用 await。
ready 和 sceneReady 中的 api 类型不同 ready.detail.api:CollectionApisceneReady.detail.api:SceneApi最常见的组合是:
ready 中拿到合辑信息和 CollectionApisceneReady 中拿到当前场景信息和 SceneApiCollectionApi 切场景、回扫描、启停云识别SceneApi 控制当前场景内部对象下面这类能力不属于 CollectionApi:
这些都属于 SceneApi,应在 sceneReady 中获取后再调用。
interface CollectionApi {
getStartButtonRect(): Promise<DOMRect | undefined>;
setStartButtonRect(rect: Partial<CSSStyleDeclaration>): Promise<void>;
backToScan(): Promise<void>;
openScene(sceneId: string): Promise<void>;
closeCurrentScene(): Promise<void>;
startCloudar(
collectionId?: string,
sceneList?: string[],
): Promise<string>;
stopCloudar(): Promise<void>;
takePhoto(): Promise<string>;
}getStartButtonRect(): Promise<DOMRect | undefined>
setStartButtonRect(rect: Partial<CSSStyleDeclaration>): Promise<void>用于读取或调整合辑首页“立即体验”按钮的样式和布局。
backToScan(): Promise<void>
openScene(sceneId: string): Promise<void>
closeCurrentScene(): Promise<void>openScene(sceneId) 打开合辑中的某个具体场景。
await api.openScene('7A43keFojH0v98xvFP2w52aF8Y67Zbb5');sceneId:要打开的场景 ID。通常应来自当前合辑的 collectionInfo.sceneList。sceneStart 之后再切换到其他场景。sceneReady、下载、加载和 sceneStart 等流程事件。closeCurrentScene() 关闭合辑中当前已打开的场景。
await api.closeCurrentScene();sceneDestroy 事件。backToScan() 让合辑从当前场景返回到扫描状态。
await api.backToScan();startCloudar(collectionId?: string, sceneList?: string[]): Promise<string>
stopCloudar(): Promise<void>startCloudar(collectionId?, sceneList?) 开始云识别扫描流程。
const sceneId = await api.startCloudar(
collectionInfo.collectionId,
collectionInfo.sceneList,
);collectionId:可选。默认使用当前已打开的合辑 ID。sceneList:可选。只有当场景列表中指定的场景扫描到后,才返回识别到。否则继续识别扫描。默认值为当前合辑中和合辑类型一致的所有场景列表。Promise<string>返回识别命中的场景 ID。
sceneList,则只会从这些场景中返回识别结果。stopCloudar() 停止当前云识别扫描流程。
await api.stopCloudar();takePhoto(): Promise<string>对当前已打开的合辑场景执行拍照。
const photo = await api.takePhoto();
previewImg.src = photo;Promise<string>返回 data:image/png;base64,... 格式的图片地址。
SceneApi.takePhoto() 基本一致:通常是当前可见内容的合成结果。在合辑页面中,两类 API 会同时出现,但职责不同:
CollectionApi 适合:
SceneApi 适合:
因此,对合辑的典型调用组织方式通常是:
let collectionApi = null;
let sceneApi = null;
iframe.addEventListener('ready', (event) => {
collectionApi = event.detail.api;
});
iframe.addEventListener('sceneReady', (event) => {
sceneApi = event.detail.api;
});