简体中文
主题
简体中文
主题
默认情况下,素材下载完成后,Kivicube 会展示“立即体验”按钮,等待用户点击后再真正进入场景。
它不仅是一个 UI 元素,也承担了浏览器媒体策略上的作用:
可以通过属性 hideStart 强制隐藏:
await kivicubeIframePlugin.openKivicubeScene(iframe, {
sceneId,
hideStart: true,
});或在 HTML 中写:
<iframe id="kivicubeScene" scene-id="..." hide-start></iframe>比起直接 hideStart,更推荐:
如果你的业务一定要按钮存在才能功能正常,建议用宿主层按钮配合默认流程事件,而不是粗暴自动进入。
如果你想保留 Kivicube 原生“立即体验”按钮提供的默认能力,但又希望把按钮和宿主页 UI 对齐,可以使用场景或合辑高级 API 提供的两个方法:
getStartButtonRect(): Promise<DOMRect | undefined>
setStartButtonRect(rect: Partial<CSSStyleDeclaration>): Promise<void>getStartButtonRect() 返回 iframe 内真实按钮的 getBoundingClientRect() 结果。setStartButtonRect(rect) 会把传入对象合并到按钮的内联样式上,常用字段包括 position、left、top、right、bottom、width、height、transform。场景页中,在 ready 事件里拿到 SceneApi:
let api = null;
iframe.addEventListener('ready', (event) => {
api = event.detail.api;
});合辑页中,在 ready 事件里拿到 CollectionApi:
let api = null;
iframe.addEventListener('ready', (event) => {
api = event.detail.api;
});hideStart: true,通常不会再有可读取、可调整的按钮。downloadAssetEnd 之后,或你确认按钮已经显示时。getStartButtonRect() 可能返回 undefined,setStartButtonRect() 也可能不会生效。let api = null;
iframe.addEventListener('ready', (event) => {
api = event.detail.api;
});
iframe.addEventListener('downloadAssetEnd', async () => {
const rect = await api.getStartButtonRect();
if (!rect) {
return;
}
Object.assign(hostStartButton.style, {
display: 'block',
position: 'fixed',
left: `${rect.left}px`,
top: `${rect.top}px`,
width: `${rect.width}px`,
height: `${rect.height}px`,
pointerEvents: 'none',
});
});这样可以在宿主页的相同位置覆盖一个自己的按钮外观,同时让点击穿透到 iframe 中真正的按钮,继续保留原始按钮的点击手势。
await api.setStartButtonRect({
position: 'absolute',
left: '24px',
bottom: '32px',
width: 'calc(100% - 48px)',
height: '52px',
});推荐优先传入带单位的 CSS 字符串值,例如 24px、52px、calc(...)。其中 0 这类值也可以直接使用数字。
pointer-events: none,让点击继续落到 iframe 的真实按钮上。setStartButtonRect() 直接把 iframe 内按钮移动到新的位置,再和宿主层标题、提示文案、品牌装饰进行对齐。