Comment construire un composant accordéon avec CSS et une touche de JavaScript

Dans le tutoriel d'aujourd'hui, nous allons apprendre à construire un composant show / hide avec CSS et un peu de JavaScript. Par défaut, jQuery fournit le slideToggle méthode qui nous permet de créer des accordéons avec un mouvement coulissant. Notre défi consiste à imiter cette fonctionnalité avec du JavaScript pur..

Voici le composant que nous allons créer:

Remarque: ceci est une fonctionnalité fournie nativement par le

et éléments, bien que ceux-ci ne bénéficient pas encore du support des navigateurs Microsoft. 

  • Expliquer les éléments «Détails» et «Résumé»

    De nombreuses bibliothèques JavaScript sont développées pour nous fournir des widgets interactifs supplémentaires sur les sites Web. De même, HTML5 a également interprété un certain nombre de…
    Thoriq Firdaus
    HTML5

1. Le HTML

Pour commencer, nous définissons un élément avec la classe de récipient qui contient deux sous-éléments:

  • le bouton qui cachera et révélera le contenu (y compris une icône SVG intégrée)
  • le contenu réel

Voici à quoi ça ressemble:

2. Le CSS

Le CSS est assez simple. Nous devons définir deux classes d’aide (c.-à-d.. cacher et spectacle). 

Pour masquer et révéler l'élément cible, nous allons utiliser le la taille propriété, mais nous ne spécifierons pas ses valeurs en CSS. Au lieu de cela, nous allons définir dynamiquement les valeurs de hauteur via JavaScript. 

Une chose à noter est que nous n'utilisons pas le afficher propriété pour basculer la visibilité de notre contenu. Cette propriété ne se compte pas parmi les propriétés CSS animables.

Voici les styles CSS correspondants:

.masquer display: none;  .show display: flex;  .info débordement: caché; transition: hauteur .5s; 

3. Le JavaScript

Il est maintenant temps de discuter de la manière dont notre code JavaScript devrait fonctionner.

Premièrement, dès que le DOM est prêt, nous obtenons la hauteur du .Info élément et ensuite mettre immédiatement sa valeur à 0.

const info = document.querySelector (". info"); let infoHeight = info.offsetHeight; info.style.height = 0; 

N'oubliez pas qu'en fonction de votre contenu (par exemple, s'il contient des images), vous devrez peut-être inclure le code ci-dessus à l'intérieur du charge un événement.

Ensuite, quand le .bascule-btn bouton est cliqué nous faisons ce qui suit:

  • Basculer la visibilité du .Moins et .plus éléments.
  • Recalculer la hauteur de la .Info élément. Si la valeur est 0 (initialement, nous lui donnons cette valeur), cela signifie que le contenu est masqué. Nous le révélons donc en définissant sa hauteur égale à sa hauteur initiale (stockée dans le répertoire). infoHauteur variable). Par contre, si le contenu est visible, nous le masquons en réglant sa hauteur sur 0.
  • Facultativement, nous nous assurons que le .bascule-btn sera cliqué une seule fois jusqu'à la fin de l'animation de la diapositive (elle dure 500 ms). 

Voici le code qui implémente tout ce comportement:

const toggleBtn = document.querySelector (". toggle-btn"); const info = document.querySelector (". info"); const less = document.querySelector (". less"); const more = document.querySelector (". more"); // hauteur initiale, laissez infoHeight = info.offsetHeight; toggleBtn.addEventListener ("click", function () this.disabled = true; more.classList.toggle ("show"); more.classList.toggle ("hide"); less.classList.toggle ("show") ; less.classList.toggle ("hide"); const infoNewHeight = info.offsetHeight; if (infoNewHeight == 0) info.style.height = '$ infoHeight px'; autre info.style.height = 0; setTimeout (() => this.disabled = false;, 500););

Redimensionnement du navigateur

La prochaine étape consiste à vérifier que le composant fonctionnera correctement lors du redimensionnement de la fenêtre du navigateur.. 

Voici le code JS nécessaire:

// définitions de variable ici window.addEventListener ("resize", () => info.style.removeProperty ("height"); infoHeight = info.offsetHeight; if (more.classList.contains ("hide")) info .style.height = '$ infoHeight px'; else info.style.height = 0;);

4. Support du navigateur

Notre démo devrait bien fonctionner dans tous les navigateurs et appareils récents. De plus, comme d'habitude, nous utilisons Babel pour compiler le code ES6 jusqu'à ES5.. 

Conclusion

Dans ce court tutoriel, nous avons construit un composant d'affichage / masquage de style accordéon avec CSS et JavaScript. Merci à l'animable la taille propriété, nous avons réussi à ajouter un effet de diapositive à notre composant. 

Notamment, nous n’avons pas pris en compte l’accessibilité. Par conséquent, si vous souhaitez améliorer ses fonctionnalités, cela pourrait certainement être la prochaine étape..

Plus de tutoriels «avec une touche de JavaScript»