P21 延时提示框

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>延时提示框</title>
    <style>
        div {
            float: left;
            margin: 10px;
        }

        #div1 {
            width: 50px;
            height: 50px;
            background: blueviolet;
        }

        #div2 {
            width: 200px;
            height: 200px;
            background: chocolate;
            display: none; /* 一开始是不需要显示的 */
        }
    </style>
    <script>
        window.onload = function(){
            var oDiv1 = document.getElementById("div1");
            var oDiv2 = document.getElementById("div2");
            var time = null;
            // 1. 首先是当我鼠标移入头像div的时候, 应该显示头像详情div
            oDiv1.onmouseover = function(){
                clearTimeout(time);
                oDiv2.style.display = 'block';
            }

            // 2. 当鼠标移出头像div的时候, 头像详情div应该延时0.5秒后再隐藏起来
            oDiv1.onmouseout = function(){
                time = setTimeout(function(){
                    oDiv2.style.display = 'none';
                }, 500);
            }
            // 3. 完成第二步骤以后, 一会发现. 当我们移出div1, 移入odiv2的时候, div2还是在0.5秒以后隐藏了
            // 这里需要进行改进, 就是当我鼠标移入div2的时候, 我们需要把定时器给它关掉, 不让它执行隐藏的代码
            oDiv2.onmouseover = function(){
                clearTimeout(time);

            }

            // 4. 此时就是当鼠标移出div2的时候, 我们要隐藏div2
            oDiv2.onmouseout = function(){
                // 这里是有一点小问题的, 因为如果我们是移出div2然后直接移入div1的话, 发现div2闪了以下
                // 这是因为先执行了下面的隐藏, 所以这里我们也要使用延时计时器来操作, 并且如果是移入div1
                // 直接关闭这个计时器即可, 不用执行隐藏的代码.
                time = setTimeout(function(){
                    oDiv2.style.display = 'none';
                }, 500);
            }

        }
    </script>
</head>

<body>
    <div id="div1">头像</div>
    <div id="div2">头像详情</div>
</body>

</html>

下面的是需要对上面的代码进行简化处理

因为在JS中, 是允许连等于赋值的, 比如a = b = c = function(){}

那么a, b, c都是这个函数;所以上面的代码可以进行简化处理如下:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>延时提示框</title>
    <style>
        div {
            float: left;
            margin: 10px;
        }

        #div1 {
            width: 50px;
            height: 50px;
            background: blueviolet;
        }

        #div2 {
            width: 200px;
            height: 200px;
            background: chocolate;
            display: none; /* 一开始是不需要显示的 */
        }
    </style>
    <script>
        window.onload = function(){
            var oDiv1 = document.getElementById("div1");
            var oDiv2 = document.getElementById("div2");
            var time = null;
            oDiv2.onmouseover = oDiv1.onmouseover = function(){
                clearTimeout(time);
                oDiv2.style.display = 'block';
            }
            
            oDiv2.onmouseout = oDiv1.onmouseout = function(){
                time = setTimeout(function(){
                    oDiv2.style.display = 'none';
                }, 500);
            }
        }
    </script>
</head>

<body>
    <div id="div1">头像</div>
    <div id="div2">头像详情</div>
</body>

</html>
原文地址:https://www.cnblogs.com/runmoxin/p/13288376.html