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

求助:如何实现鼠标移出触发元素时隐藏对应Div(CSS/JS方案)

求助:如何实现鼠标移出触发元素时隐藏对应Div(CSS/JS方案)

兄弟,我扫了一眼你的代码,立刻就发现hideDiv函数的逻辑完全写反了,这就是鼠标移出后div不消失的核心原因!另外代码里还有不少冗余和语法小错误,我给你一步步理顺:

先揪出原代码的问题:

  • hideDiv函数里,你把要隐藏的内容div(比如cell24、cell26)的display设成了block——这等于主动把它们显示出来,和你要隐藏的需求完全背道而驰
  • 你先把所有目标div强制设为显示,再单独隐藏当前div,导致刚隐藏的div又被前面的代码改回显示,等于白操作
  • 两个函数里硬写了一堆id,不仅冗余,后期加新内容div时要改一堆代码,维护起来巨麻烦

修正后的完整可运行方案:

我帮你简化了逻辑,还给要控制的内容div统一加了类名,以后加新内容直接加类就行,不用改JS:

1. 优化后的JavaScript代码

// 给所有内容div统一加个content-cell类,不用再写一堆id
function showDiv(divId) {
    // 先隐藏所有内容div
    const allContentDivs = document.querySelectorAll('.content-cell');
    allContentDivs.forEach(div => {
        div.style.display = 'none';
    });
    // 再显示选中的目标div
    const targetDiv = document.getElementById(divId);
    if (targetDiv) {
        targetDiv.style.display = 'block';
    }
}

function hideDiv() {
    // 鼠标移出时,直接隐藏所有内容div(符合你要让其他内容能重新显示的需求)
    const allContentDivs = document.querySelectorAll('.content-cell');
    allContentDivs.forEach(div => {
        div.style.display = 'none';
    });
}

2. 对应的HTML修改(给内容div加统一类名)

<!-- 给所有需要控制显示隐藏的内容div加content-cell类 -->
<div id="cell24" class="cell content-cell">
<br><br><br><br>Content #1<br><br><br><br></div>
<div id="cell26" class="cell content-cell">
<br><br><br><br>Content #2<br><br><br><br></div>

<!-- 触发元素的onmouseout直接调用hideDiv,不用传id了 -->
<div id="cell23" class="cell" onmouseover="showDiv('cell24')" onmouseout="hideDiv()">
         <p2>Load Content #1</p2>
         </div>
<div id="cell25" class="cell" onmouseover="showDiv('cell26')" onmouseout="hideDiv()">
<p2>Load Content #2</p2>
</div>

3. 修正后的CSS代码(补全定位、修正拼写/语法错误)

#cell23 {
    top: 68%;
    left: 8%;
    display: block;
    height: 40%;
    width: 40%;
    background: transparent; /* 修正拼写错误:tansparent → transparent */
    font-size: 12pt;
    font-weight: bold;
    font-family: verdana; /* 修正语法:font: verdana → font-family: verdana */
    font-size: 16pt;
    border-radius: 0;
    box-shadow: none; /* 修正语法:box-shadow: 0 → box-shadow: none */
    border: 0;
    text-shadow: 2px 2px 4px #ffffff;
    z-index: 8;
    position: absolute; /* 必须加定位,top/left才会生效! */
}   
       
#cell24 {
    display: none;
    top: 58%;
    left: 67%;
    background: #00000013;
    color: #ffffff;
    text-align: center;
    padding: 0;
    border: 1px dashed #000000;
    height: 40%;
    width: 24%;
    overflow: auto;
    overflow-y: scroll;
    border-radius: 50%;
    box-shadow: 0 0 16px rgba(255, 255, 255, 0.8);
    z-index: 3;
    text-shadow: 2px 2px 4px #000000;
    position: absolute; /* 补全定位 */
}
         
#cell25 {
    top: 72%;
    left: 8%;
    display: block;
    height: 40%;
    width: 40%;
    background: transparent; /* 修正拼写错误 */
    font-size: 12pt;
    font-weight: bold;
    font-family: verdana; /* 修正语法 */
    font-size: 16pt;
    border-radius: 0;
    box-shadow: none; /* 修正语法 */
    border: 0;
    text-shadow: 2px 2px 4px #ffffff;
    z-index: 8;
    position: absolute; /* 补全定位 */
} 

#cell26 { 
    display: none;
    top: 58%;
    left: 67%;
    background: #00000013;
    color: #ffffff;
    text-align: center;
    padding: 0;
    border: 1px dashed #000000;
    height: 40%;
    width: 24%;
    overflow: auto;
    overflow-y: scroll;
    border-radius: 50%;
    box-shadow: 0 0 16px rgba(255, 255, 255, 0.8);
    z-index: 3;
    text-shadow: 2px 2px 4px #000000;
    position: absolute; /* 补全定位 */
}

额外提醒:

我给所有用了top/left的div加了position: absolute,不然你的定位完全不生效——这也是你可能看不到元素正确位置的隐藏坑!

这样改完后,鼠标移到触发元素上会显示对应内容,移出后所有内容div都会隐藏,完美满足你的需求!

备注:内容来源于stack exchange,提问作者Phantom Loads

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:30:29