简体   繁体   中英

Event listener hover changing other element

I made this script for showing/hiding other div that comes to place of the one with event (ricon1) on mouse in and out:

HTML:

        <div class="rule-container">

        <div class="rule" id="rule1">
            <div class="rule-icon" id="ricon1">
            </div>
            <div class="rule-decription" id="rdescription1">
            </div>
        </div>
        <div class="rule" id="rule2">
            <div class="rule-icon" id="ricon2">
            </div>
            <div class="rule-decription" id="rdescription2">
            </div>
        </div>
       <div class="rule" id="rule3">
            <div class="rule-icon" id="ricon3">
            </div>
            <div class="rule-decription" id="rdescription3">
            </div>
        </div> 
        <div class="rule" id="rule4">
            <div class="rule-icon" id="ricon4">
            </div>
            <div class="rule-decription" id="rdescription4">
            </div>
        </div> 
    </div>

CSS:

div.rule {
display: inline-block;
width:20%;
margin-left:2%;
margin-right:2%;
background-color: cadetblue;

}

div.rule:first-child {
    margin-left:3.5%;
    background-color:yellow;
}

div.rule > div {
    width:100%;
}


div.rule-icon {
    height:240px;
    background-color:lightpink;
    display:block;

}

div.rule-decription {
    height: 240px;
    background-color: springgreen;
    display:none;

}

JS:

document.getElementById("ricon1").addEventListener("mouseenter",function (){
    document.getElementById('ricon1').style.display = 'none';
    document.getElementById('rdescription1').style.display = 'block';
});

document.getElementById("ricon1").addEventListener("mouseout",function (){
    document.getElementById('ricon1').style.display = 'block';    
    document.getElementById('rdescription1').style.display = 'none';
});

But the problem is that it flashes (continuously switching between on and off state, what am i doing wrong ?

How may i change script so i dont have to do it for all pairs of divs (ricon1, rdescription1; ricon2, rdescription2... etc) because there is like 6 pairs?

Is there a specific reason you don't want to use jQuery for that?

Anyway, here's an example without jQuery:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div class = "switch"> <div class = "icon">A</div> <div style = "display:none" class = "desc">Desc1</div> </div> <div class = "switch"> <div class = "icon">B</div> <div style = "display:none" class = "desc">Desc2</div> </div> <div class = "switch"> <div class = "icon">C</div> <div style = "display:none" class = "desc">Desc3</div> </div> <script> var icons = document.querySelectorAll('.switch'); for (var i = 0; i < icons.length; i++) { icons[i].addEventListener("mouseenter", function() { (this.querySelectorAll(".icon")[0]).style.display = 'none'; (this.querySelectorAll(".desc")[0]).style.display = 'block'; }); icons[i].addEventListener("mouseleave", function() { (this.querySelectorAll(".icon")[0]).style.display = 'block'; (this.querySelectorAll(".desc")[0]).style.display = 'none'; }); } </script> </body> </html> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM