如何使上下文菜单显示在Three.js 3D物体前方?
解决Three.js上下文菜单被3D物体遮挡的问题
你的问题核心是DOM上下文菜单的层级低于Three.js渲染用的<canvas>元素,导致被3D画面覆盖。只需通过调整CSS层级即可解决,以下是具体修改方案:
方案1:在代码中直接设置菜单层级
修改右键点击分支的代码,添加z-index样式设置,确保菜单层级高于canvas:
else { if (intersects.length) { intersect = intersects[0].object; menu.style.left = x + "px"; menu.style.top = y + "px"; menu.style.display = ""; // 设置足够高的层级,确保菜单在canvas之上 menu.style.zIndex = "9999"; } else { intersect = undefined; } }
方案2:通过CSS全局定义菜单样式
如果希望样式管理更规范,也可以给菜单元素添加全局CSS规则:
#menu { position: absolute; z-index: 9999; /* 保留你原本的菜单样式 */ }
额外注意点
- 确保Three.js的canvas元素没有设置过高的
z-index(建议不超过9998),如果canvas有自定义z-index,请调整为低于菜单的值。 - 菜单元素的
position属性必须是absolute或fixed,否则z-index不会生效。
修改完成后,上下文菜单就会显示在3D物体前方,不会被遮挡。
内容的提问来源于stack exchange,提问作者GeekAndNerd223
相关产品推荐
相关产品推荐

