Achieve a hidden display effect when the mouse moves in and out of the box

Application scenario: Often when the mouse is attached to a box A, another box B will appear. If the mouse is moved away, the box B disappears with a delay, and if it is moved into the box B, it does not disappear.

Use setTimeout to achieve

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            float: left;
        }
        
        .red {
     
     
            width: 100px;
            height: 200px;
            background-color: red;
        }
        
        .blue {
     
     
            width: 100px;
            height: 100px;
            background-color: blue;
            display: none;
        }
    </style>
</head>

<body>
    <div class="red"></div>
    <div class="blue"></div>
    <script>
        var red = document.querySelector('.red');
        var blue = document.querySelector('.blue');
        var timer = null;

        // red.addEventListener('mouseover', function() {
     
     
        //     clearTimeout(timer);
        //     blue.style.display = 'block';
        // })

        // red.addEventListener('mouseleave', function() {
     
     
        //     timer = setTimeout(function() {
     
     
        //         blue.style.display = 'none';
        //     }, 500);
        // })

        // blue.addEventListener('mouseover', function() {
     
     
        //     clearTimeout(timer);
        // })

        // blue.addEventListener('mouseleave', function() {
     
     
        //     timer = setTimeout(function() {
     
     
        //         blue.style.display = 'none';
        //     }, 500);
        // })





        function over() {
     
     
            clearTimeout(timer);
            blue.style.display = 'block';
        }

        function leave() {
     
     
            timer = setTimeout(function() {
     
     
                blue.style.display = 'none';
            }, 500);
        }

        red.addEventListener('mouseover', over)
        blue.addEventListener('mouseover', over)

        red.addEventListener('mouseleave', leave)
        blue.addEventListener('mouseleave', leave)
    </script>
</body>

</html>

Guess you like

Origin blog.csdn.net/weixin_45773503/article/details/112861533