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

如何解决鼠标hover div元素时出现的闪烁问题?

解决鼠标悬停文本闪烁问题

你遇到的闪烁问题根源在于:当鼠标悬停在div1上触发mouseover事件后,你立刻把div1设为visibility: hidden,此时鼠标不再处于div1的范围内,会立刻触发div1的mouseout事件,导致div1重新显示、div2隐藏。这个过程反复循环,就出现了闪烁现象。

下面提供两种可行的解决方案:


方案一:通过父容器监听事件

用一个父容器包裹div1和div2,监听父容器的mouseenter和mouseleave事件。这样不管内部元素如何切换,只要鼠标在父容器范围内,就不会触发离开事件,从根源避免循环触发问题。

修改后的完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Week6</title>
    <style>
        #p1{
            font-size: 2em;
            color: blue;
        }

        #parent{
            position: relative;
            min-height: 50px;
        }

        #div1{
            position: absolute;
            visibility: visible;
            padding: 0px;
        }

        h1{
            font-size: 3em;
            color: yellow;
            font-style: italic;
        }

        #div2{
            display: flex;
            justify-content: center;
            margin-top: -10px;
            left: 500px;
            visibility: hidden;
            position: absolute;
        }
    </style>
    
</head>
<body>
    <div id="parent">
        <div id="div1">
            <h2>Move the cursor over the text to see it change.</h2>
        </div>

        <div id="div2">
            <h1>Move the cursor over the text to see it change.</h1>
        </div>
    </div>
    
</body>
</html>

<script>
    let parent = document.getElementById("parent");
    let div1 = document.getElementById("div1");
    let div2 = document.getElementById("div2");

    parent.addEventListener('mouseenter', () => {
        div1.style.visibility = "hidden";
        div2.style.visibility = "visible";
    });

    parent.addEventListener('mouseleave', () => {
        div1.style.visibility = "visible";
        div2.style.visibility = "hidden";
    })
</script>

方案二:使用CSS :hover实现(更简洁)

直接利用CSS的:hover伪类控制元素的显示隐藏,完全不需要JavaScript,避免事件循环问题,代码更简洁易维护。

完整代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Week6</title>
    <style>
        #p1{
            font-size: 2em;
            color: blue;
        }

        #parent{
            position: relative;
            min-height: 50px;
        }

        #div1{
            position: absolute;
            visibility: visible;
            padding: 0px;
        }

        h1{
            font-size: 3em;
            color: yellow;
            font-style: italic;
        }

        #div2{
            display: flex;
            justify-content: center;
            margin-top: -10px;
            left: 500px;
            visibility: hidden;
            position: absolute;
        }

        #parent:hover #div1 {
            visibility: hidden;
        }

        #parent:hover #div2 {
            visibility: visible;
        }
    </style>
    
</head>
<body>
    <div id="parent">
        <div id="div1">
            <h2>Move the cursor over the text to see it change.</h2>
        </div>

        <div id="div2">
            <h1>Move the cursor over the text to see it change.</h1>
        </div>
    </div>
    
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:16