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

如何实现太阳系页面星球hover显示悬浮菜单,:hover触发失效怎么解决

问题根因

  • 所有行星轨道div统一设置了z-index:9,尺寸更大的外层轨道(比如冥王星的780px宽容器)会堆叠在内层小轨道之上,鼠标事件被外层透明容器拦截,内层元素无法接收hover触发。
  • 行星实体是用::before伪元素绘制,轨道容器本身大部分区域为透明,但默认会响应鼠标事件,导致hover触发逻辑异常。

修复方案

  1. 调整轨道层级,内层轨道z-index高于外层,避免外层容器拦截内层事件,在原有CSS中添加如下代码:
.space .sun { z-index: 12; }
.space .mercury { z-index: 11; }
.space .venus { z-index: 10; }
.space .earth { z-index: 9; }
.space .mars { z-index: 8; }
.space .asteroids-belt { z-index: 7; }
.space .jupiter { z-index: 6; }
.space .saturn { z-index: 5; }
.space .uranus { z-index: 4; }
.space .neptune { z-index: 3; }
.space .pluto { z-index: 2; }
  1. 禁用透明轨道区域的鼠标事件,仅保留行星实体和太阳的事件响应能力,修改原有.space .solar-syst div规则,新增对应配置:
.space .solar-syst div {
    border-radius: 1000px;
    top: 50%;
    left: 50%;
    position: absolute;
    z-index: 9;
    /* 新增下面这行 */
    pointer-events: none;
}
/* 新增如下规则,开启行星和太阳的鼠标事件 */
.space .sun,
.space .solar-syst div:not(.sun):not(.asteroids-belt)::before {
    pointer-events: auto;
}
  1. 完成上述配置后即可正常编写hover交互逻辑,示例如下:
/*  hover地球时高亮行星  */
.space .earth:hover::before {
    transform: scale(1.2);
    box-shadow: 0 0 10px #11abe9;
    transition: all 0.2s ease;
    cursor: pointer;
}
/* hover时展示对应悬浮菜单,假设你的菜单类为.earth-menu */
.earth-menu {
    display: none;
    position: fixed;
    z-index: 999;
    /* 补充你Figma设计的菜单样式 */
}
.space .earth:hover ~ .earth-menu {
    display: block;
}

补充说明

如果需要悬浮菜单跟随行星实时位置展示,建议配合JS监听mouseover事件获取行星坐标,动态设置菜单定位,实现效果会比纯CSS更灵活。

内容的提问来源于stack exchange,提问作者Loran Maes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:01