You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使上下文菜单显示在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:18:21