CSS2DObject无法触发点击事件

[email protected]版本后,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)
相关推荐
烛阴2 分钟前
💻 从0到1掌握CSS选择器:精准元素定位的终极指南
前端·javascript·css
实习生小黄4 分钟前
使用psd.js将psd路径转成svg格式
前端·javascript·svg
路灯下的光5 分钟前
一杯茶时间,听我再讲一次npm link原理!
前端·node.js
唐某人丶5 分钟前
AI 应用开发入门:前端也可以学习 AI
前端·人工智能·ai编程
望获linux8 分钟前
【Linux基础知识系列】第二十八篇-管道与重定向的使用
linux·前端·chrome·操作系统·rtos·嵌入式软件
兮丶9 分钟前
PageSpy 对无界子应用内容录制的实现,即 iframe实现思路
前端
CAD老兵13 分钟前
TypeScript 三斜线指令(Triple-Slash Directives)详解
前端
CAD老兵21 分钟前
TypeScript 声明合并(Declaration Merging)详解
前端
oioihoii28 分钟前
C++11可变参数模板从入门到精通
前端·数据库·c++
Lebron28 分钟前
如何将 Next.js 项目部署到阿里云服务器
前端·next.js