Envoyer votre premier script au navigateur
Ajoutons un bouton pour ouvrir et fermer votre menu de navigation sur les tailles d’écran ciblant les mobiles, nécessitant une certaine interactivité côté client !
Préparez-vous à…
- Créer un composant de menu
- Rédiger un
<script>
pour permettre aux visiteurs de votre site d’ouvrir et de fermer le menu de navigation - Déplacer votre JavaScript dans son fichier
.js
Créer un composant Menu
Section intitulée « Créer un composant Menu »Créez un composant <Menu />
pour ouvrir et fermer votre menu mobile.
-
Créez un fichier nommé
Menu.astro
danssrc/components/
-
Copiez le code suivant dans votre composant. Il crée un bouton qui sera utilisé pour basculer la visibilité des liens de navigation sur les appareils mobiles. (Vous ajouterez les nouveaux styles CSS au fichier « global.css » ultérieurement.)
src/components/Menu.astro ------<button aria-expanded="false" aria-controls="main-menu" class="menu">Menu</button> -
Placez ce nouveau composant
<Menu />
juste avant votre composant<Navigation />
dansHeader.astro
.Montrez-moi le code !
src/components/Header.astro ---import Menu from './Menu.astro';import Navigation from './Navigation.astro';---<header><nav><Menu /><Navigation /></nav></header> -
Ajoutez les styles suivants pour votre composant Menu, y compris certains styles adaptatifs :
src/styles/global.css /* Styles de la navigation */.menu {background-color: #0d0950;border: none;color: #fff;font-size: 1.2rem;font-weight: bold;padding: 5px 10px;}.nav-links {width: 100%;display: none;margin: 0;}.nav-links a {display: block;text-align: center;padding: 10px 0;text-decoration: none;font-size: 1.2rem;font-weight: bold;text-transform: uppercase;color: #0d0950;}.nav-links a:hover,.nav-links a:focus{background-color: #ff9776;}:has(.menu[aria-expanded="true"]) .nav-links {display: unset;}@media screen and (min-width: 636px) {.nav-links {margin-left: 5em;display: block;position: static;width: auto;background: none;}.nav-links a {display: inline-block;padding: 15px 20px;}.menu {display: none;}}
Rédiger votre première balise de script
Section intitulée « Rédiger votre première balise de script »Votre en-tête n’est pas encore interactif car il ne peut pas réagir aux interactions de l’utilisateur, comme cliquer sur le menu pour afficher ou masquer les liens de navigation.
L’ajout d’une balise <script>
fournit du JavaScript côté client pour « écouter » un événement utilisateur, puis réagir en conséquence.
-
Ajoutez la balise
<script>
suivante àindex.astro
, juste avant la balise de fermeture</body>
.src/pages/index.astro <Footer /><script>const menu = document.querySelector('.menu');menu.addEventListener('click', () => {const isExpanded = menu.getAttribute('aria-expanded') === 'true';menu.setAttribute('aria-expanded', !isExpanded);});</script></body> -
Consultez à nouveau l’aperçu de votre navigateur en utilisant différentes tailles, et vérifiez que vous avez un menu de navigation fonctionnel qui est à la fois réactif à la taille de l’écran et réagit aux interactions de l’utilisateur sur cette page.
Importation d’un fichier .js
Section intitulée « Importation d’un fichier .js »Au lieu d’écrire votre JavaScript directement sur chaque page, vous pouvez déplacer le contenu de votre balise <script>
dans son propre fichier .js
dans votre projet.
-
Créez
src/scripts/menu.js
(vous devrez créer un nouveau dossier/scripts/
) et déplacez-y votre JavaScript.src/scripts/menu.js const menu = document.querySelector('.menu');menu.addEventListener('click', () => {const isExpanded = menu.getAttribute('aria-expanded') === 'true';menu.setAttribute('aria-expanded', !isExpanded);}); -
Remplacez le contenu de la balise
<script>
dansindex.astro
par l’importation de fichier suivante :src/pages/index.astro <Footer /><script>const menu = document.querySelector('.menu');menu.addEventListener('click', () => {const isExpanded = menu.getAttribute('aria-expanded') === 'true';menu.setAttribute('aria-expanded', !isExpanded);});import "../scripts/menu.js";</script></body> -
Contrôlez à nouveau votre aperçu de navigateur à une taille plus petite et vérifiez que le menu est toujours capable d’ouvrir et de fermer vos liens de navigation.
-
Ajoutez la même balise
<script>
avec l’importation sur vos deux autres pages,about.astro
etblog.astro
, et vérifiez que vous avez un en-tête réactif et interactif sur chaque page.src/pages/about.astro & src/pages/blog.astro <Footer /><script>import "../scripts/menu.js";</script></body>
Vous aviez précédemment utilisé un peu de JavaScript pour construire des parties de votre site :
- Définir les titres de la fenêtre et de votre page dynamiquement
- Parcourir une liste de compétences sur la page « À propos »
- Afficher conditionnellement des éléments HTML
Ces commandes sont toutes exécutées au moment de la compilation pour créer du HTML statique pour votre site, puis le code est « jeté ».
Le JavaScript dans une balise <script>
est envoyé au navigateur et peut être exécuté en fonction des interactions de l’utilisateur, comme actualiser une page ou changer l’état d’un élément interactif.
Tester vos connaissances
Section intitulée « Tester vos connaissances »-
Quand Astro exécute-t-il le JavaScript écrit dans le frontmatter d’un composant ?
-
En option, Astro peut envoyer du JavaScript au navigateur pour permettre :
-
Le JavaScript côté client sera envoyé au navigateur d’un utilisateur quand il est écrit ou importé :
Liste de contrôle
Section intitulée « Liste de contrôle »Ressources
Section intitulée « Ressources »Les scripts côté client dans Astro
Tutorials