我正在Three.js中制作一个移动对象的动画。在这个动画中,我在单击对象时创建了一个文本气泡,它有一个"X〃;按钮关闭它。但是,如果x按钮覆盖Three.js中的3D对象,则该按钮将被完全忽略,而3D对象将被单击。我该如何避免这种情况,并允许此HTML内容始终具有优先级?
如果有帮助的话,我正在使用光线投射来检测三维对象上的单击。我已经尝试过给按钮一个更高的z阶,但没有成功。而且,为了清楚起见,HTML内容在视觉上位于3D对象之上。
此外,如果在文本气泡中单击不会直接落到文本气泡下的对象,那就太好了。
编辑:这是我的onclick函数的简化代码(适用于我的3D对象(。我为我的按钮绑定了一个不同的onclick函数。
document.addEventListener('mousedown', () => {
raycaster.setFromCamera(mouse, camera);
const hits = raycaster.intersectObjects(scene.children);
if(hits.length > 0) {
---do stuff---
}
renderer.render(scene, camera);
});
对于可点击的对象,我只使用z-index
就可以实现这一点,但如果这不起作用,您可以尝试在3D渲染中使用pointer-events: none;
。请在此处查看屏幕截图https://streamable.com/yzp68c.webGL地球仪在react中使用了三个.js,是链接位于顶部的活动区域的全宽。
那么外部容器是position: relative;
。。。链接位于position: absolute; z-index: 1000;
内部的一个div中,然后earth three.js渲染器是最后一个div,但仍在容器中。
请参阅此链接中的首要答案:如何使用HTML元素阻止THREE.js光线投射?
这对我来说非常有效。