botones donde solo uno está activado

PHOTO EMBED

Wed Dec 08 2021 15:51:33 GMT+0000 (Coordinated Universal Time)

Saved by @samn #javascript #eventos #delegación

<div class="box">
    <div class="cambio"><a class="enlase" href="#">Inicio</a></div>
    <div class="cambio"><a class="enlase" href="#">Horario</a></div>
    <div class="cambio"><a class="enlase" href="#">Blog</a></div>
</div>


// css 
.box{
width: 60vw;
height: 30px;
background: gray;
display: flex;
justify-content: space-around;
}
.cambio{
    height: 100%;
    background: blue;
}
.cambio a{
    display: inline-block;
    width: 100px;
    height: 100%;
    color: white;
}
.active a{
    background: red;
}
.active{
    background:red;
}

// javascript

//metodo (1): se señala al elementi que dispara con la i del for
//            la clase active sirve como puente, sin nesecidad que este en el css

let cambio = document.querySelectorAll(".cambio");
for(let i = 0; i < cambio.length; i++) {
    cambio[i].addEventListener("click", () =>{
	cambio.forEach(link => {
	    link.classList.remove("active");
	});
	cambio[i].classList.add("active");
    });
};

// metodo(2): delegación de evento e.target detecta al elemento que dispara
//            la clase active se incluye en el css 
//            se trabaja solo con enlase.

let enlase = document.querySelectorAll(".enlase");
enlase.forEach(lin => {
    lin.addEventListener("click", (e) => {
    enlase.forEach(link => { // es el enlase cuando  ya tiene el evento click
	link.classList.remove("active");
    });
    e.target.classList.add("active"); // detecta donde se iso click(elemento)
    });
});

content_copyCOPY

-El razonamiento principal es separar el elemento que dispara de los demás eventos que burbujean. - Lo mismo se pudo hacer con for aunque no se uso el evento burbuja.

https://uniwebsidad.com/tutoriales