自定义点击
相关参考:
宿主页面如果覆盖了自己的按钮、提示层或引导层,有时会挡住 iframe 内部的点击。此时可以把宿主层的点击坐标“转发”给场景。
当前高级 API 提供的方法是:
js
await api.dispatchTouchEvent(x, y);典型场景
- 宿主层在 iframe 上方盖了一层透明蒙版
- 你想统一管理点击埋点,再决定是否继续交给场景
- 你需要做自定义命中逻辑
基本用法
js
overlay.addEventListener('click', async (event) => {
await api.dispatchTouchEvent(event.clientX, event.clientY);
});注意:x和y应该是iframe中的坐标值,而不是宿主页面中的坐标值。
如果overlay和iframe刚好大小一致,位置一致,则直接传递即可。否则需要进行坐标系变化计算。
它做了什么
dispatchTouchEvent() 会:
- 根据宿主页面传入的屏幕坐标
- 结合 iframe 容器的尺寸换算出射线
- 在内部执行一次对象点击检测
所以你传入的应该是iframe内部页面坐标,而不是宿主页面坐标。
与对象事件联动
通常会搭配 api.on('click', ...) 一起使用:
js
const target = await api.getObject('rabbit');
await api.on('click', ({ target }) => {
console.log('内部对象被点击', target);
}, target);注意
x、y必须是数字- 如果 iframe 容器当前不可见或宽高为 0,事件不会生效
- 这仅仅只是“转发点击”,并不是模拟完整的触摸手势系统【后续可能会考虑实现】
建议
如果只是做少量自定义按钮,优先让按钮避开关键交互区域;只有在确实需要宿主接管点击链路时,再使用 dispatchTouchEvent()。