Vue : construire une application web (école d'ingénieur) · Chapitre 2 · Exercice de TD
Menu repliable
Gabarits et directives · niveau 2
Énoncé
Refaire avec Vue le menu repliable de la Librairie (livre JavaScript) : un bouton « Menu » qui ouvre et ferme la liste des liens, avec aria-expanded et aria-controls, et la touche Échap qui le ferme quand le focus est sur le bouton.
Corrigé
<nav id="app" aria-label="Navigation principale">
<button type="button" aria-controls="menu" :aria-expanded="ouvert"
@click="ouvert = !ouvert" @keydown.esc="ouvert = false">Menu</button>
<ul v-show="ouvert" id="menu">
<li><a href="index.html">Accueil</a></li>
<li><a href="catalogue.html">Catalogue</a></li>
<li><a href="panier.html">Panier</a></li>
</ul>
</nav>
const { createApp, ref } = Vue;
createApp({
setup() {
return { ouvert: ref(false) };
},
}).mount("#app");
Au chargement, après un clic sur « Menu », puis après Échap :
aria-expanded=false, liste cachée
aria-expanded=true, liste visible
aria-expanded=false, liste cachée, focus sur Menu
Le même booléen pilote aria-expanded et v-show : l'état annoncé et l'état visible ne peuvent pas diverger, alors qu'au livre JavaScript il fallait les mettre à jour ensemble. Le focus reste sur le bouton, d'où l'on peut rouvrir le menu.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.