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)
相关推荐
向葭奔赴♡27 分钟前
CSS是什么?—— 网页的“化妆师”
前端·css
黑犬mo32 分钟前
在Edge、Chrome浏览器上安装uBlock Origin插件
前端·edge
excel37 分钟前
🧩 Vue 3 watch 源码详解(含完整注释)
前端·javascript·vue.js
大前端helloworld39 分钟前
前端梳理体系从常问问题去完善-网络篇
前端·面试
excel44 分钟前
🌿 一文看懂 Vue 3 的 watch 源码:从原理到流程
前端
繁依Fanyi2 小时前
让工具说话:我在 Inspira Board 里用 AI 把“能用、好用、可复用”落成了日常
前端
weixin_456904272 小时前
C# 中的回调函数
java·前端·c#
kura_tsuki3 小时前
[Web网页] LAMP 架构与环境搭建
前端·架构
yinuo3 小时前
UniApp+Vue3多分包引入同一 npm 库被重复打包至 vendor 的问题分析与解决
前端
码界奇点3 小时前
Spring Web MVC构建现代Java Web应用的基石
java·前端·spring·设计规范