CSS2DObject无法触发点击事件

three.js@0.13X版本后,CSS2DRenderer中的 CSS2DObject无法触发点击事件。 原因是OrbitControls中会对绑定的Dom进行事件监听,并且阻止穿透。

解决办法是:

  • 在实例化 OrbitControls 时绑定renderer(而不是CSS2DRenderer)
  • 这时候OrbitControls无法转动,因为CSS2DRenderer的图层较高,所以还需要给 CSS2DRendererpointerEvents='none'
  • 再给 CSS2DObject的el的pointerEvents='auto'
Typescript 复制代码
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far)
const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true })
renderer.setSize(element.offsetWidth, element.offsetHeight)
element.appendChild(renderer.domElement)
const CSSRenderer = new CSS2DRenderer()
CSSRenderer.setSize(element.offsetWidth, element.offsetHeight)
CSSRenderer.domElement.style.position = 'absolute'
CSSRenderer.domElement.style.top = '0px'
element.appendChild(CSSRenderer.domElement)
const control = new OrbitControls(camera, renderer.domElement) // important!
CSSRenderer.domElement.style.pointerEvents = 'none' // important!
// CSSObject
const div = document.createElement("div")
div.style.pointerEvents = "auto" // important!
const object = new CSS2DObject(div)
相关推荐
白兰地空瓶13 小时前
🚀你以为你在写 React?其实你在“搭一套前端操作系统”
前端·react.js
爱上妖精的尾巴13 小时前
6-4 WPS JS宏 不重复随机取值应用
开发语言·前端·javascript
似水流年QC14 小时前
深入探索 WebHID:Web 标准下的硬件交互实现
前端·交互·webhid
陪我去看海14 小时前
测试 mcp
前端
speedoooo14 小时前
在现有App里嵌入一个AI协作者
前端·ui·小程序·前端框架·web app
全栈胖叔叔-瓜州15 小时前
关于llamasharp 大模型多轮对话,模型对话无法终止,或者输出角色标识User:,或者System等角色标识问题。
前端·人工智能
三七吃山漆15 小时前
攻防世界——wife_wife
前端·javascript·web安全·网络安全·ctf
用户479492835691515 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
GISer_Jing15 小时前
前端营销技术实战:数据+AI实战指南
前端·javascript·人工智能
GIS之路16 小时前
使用命令行工具 ogr2ogr 将 CSV 转换为 Shp 数据(二)
前端