Uno de los efectos que más use de jQuery fue la función de slideToggle(). A continuación he creado ese efecto de deslizamiento en Vanilla JS, re-utilizable para múltiples elementos en la misma página.
He utilizado la clase «js-toggle» para asignar al elemento que se encargue de la acción de abrir/ocultar, junto con un atributo «data-container» para asignar el «id» del contenedor del slide.
Ejemplo:
<button class="js-toggle" data-container="toggle-1">Mostrar toggle 1</button> <span class="js-toggle" data-container="toggle-2">Mostrar toggle 2</span> Etc...
Y para el elemento contenedor del slide he usado la clase «toggle-container» y el atributo «id» con el nombre que quieras.
Ejemplo:
<div class="toggle-container" id="toggle-1"> <!-- tu contenido --> </div> <div class="toggle-container" id="toggle-2"> <!-- tu contenido --> </div>
.toggle-container { transition: height 0.35s ease-in-out; overflow: hidden; } .toggle-container:not(.active) { display: none; }
Y el código js:
var linkToggle = document.querySelectorAll('.js-toggle'); for(i = 0; i < linkToggle.length; i++){ linkToggle[i].addEventListener('click', function(event){ event.preventDefault(); var container = document.getElementById(this.dataset.container); if (!container.classList.contains('active')) { container.classList.add('active'); container.style.height = 'auto'; var height = container.clientHeight + 'px'; container.style.height = '0px'; setTimeout(function () { container.style.height = height; }, 0); } else { container.style.height = '0px'; container.addEventListener('transitionend', function () { container.classList.remove('active'); }, { once: true }); } }); }
Demo:
(*) Existe una forma aún más sencilla de hacerlo usando básicamente CSS con min-height pero el rendimiento en JS es algo mejor.
Agradezco tu comentario 🤘