1. 程式人生 > >滑鼠多次任意點選元素,css的hover失效的解決辦法

滑鼠多次任意點選元素,css的hover失效的解決辦法

1.解決辦法:改為js的mouseenter和mouseleave事件;

2.原因:經定位,是滑鼠多次任意點選元素時,進入到了mouseleave事件中(滑鼠點選時是在元素上的,不應該進入mouseleave中),所以才導致了hover失效。

3.程式碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        .box {
            padding: 20px;
            background: #F00;
        }

        /* .box:hover p
        {
            opacity: 1;
        } */
        .box p {
            position: relative;
            display: block;
            opacity: 0;
            width: 200px;
            height: 200px;
            background: #000;
        }
        .box.hoverClass p {
            opacity: 1;
        }
    </style>
</head>

<body>
<p>opacity在不為1的時候會建立層疊上下文</p>
<div class="box" id="box">
    <p class="hoverClass">嘿嘿</p>
</div>
<script>
    let ele = document.getElementById("box"),
    img = document.getElementsByTagName("p")[0];
    
    let mouseOverFlag = false;
    ele.addEventListener("click", function(e) {
        mouseOverFlag = false;
    });
    ele.addEventListener("mousemove", function(e) {
        mouseOverFlag = true;
    });
    ele.addEventListener("mouseenter", function(e) {
        mouseOverFlag = true;
        console.log('mouseenter');
        if (!ele.classList.contains("hoverClass")) {
            ele.classList.add("hoverClass");
        }
    });
    ele.addEventListener("mouseleave", function(e) {
        if (mouseOverFlag) {
            console.log('mouseleave');
            if (ele.classList.contains("hoverClass")) {
                ele.classList.remove("hoverClass");
            }
        }
    });
</script>
</body>
</html>