跳转到内容

自定义点击

相关参考:

宿主页面如果覆盖了自己的按钮、提示层或引导层,有时会挡住 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() 会:

  1. 根据宿主页面传入的屏幕坐标
  2. 结合 iframe 容器的尺寸换算出射线
  3. 在内部执行一次对象点击检测

所以你传入的应该是iframe内部页面坐标,而不是宿主页面坐标。

与对象事件联动

通常会搭配 api.on('click', ...) 一起使用:

js
const target = await api.getObject('rabbit');

await api.on('click', ({ target }) => {
  console.log('内部对象被点击', target);
}, target);

注意

  • xy 必须是数字
  • 如果 iframe 容器当前不可见或宽高为 0,事件不会生效
  • 这仅仅只是“转发点击”,并不是模拟完整的触摸手势系统【后续可能会考虑实现】

建议

如果只是做少量自定义按钮,优先让按钮避开关键交互区域;只有在确实需要宿主接管点击链路时,再使用 dispatchTouchEvent()