Comportement d'une page web
Ce cours a pour support des activités où vous devrez écrire le code JavaScript d'une page dont le code HTML et CSS vous est fourni. Vous pouvez télécharger le code de base de toutes les activités en cliquant sur ce lien, puis le décompresser à l'aide d'un outils comme 7z.
Activité 1: evenements
En général, le comportement d'un élément dans une page web est des réactions à des évènements.
Par exemple, voici un bouton :
Et la description de son comportement :
Evènement : L'utilisateur clique (sur le bouton)
Réaction : si le texte du bouton est ON, le texte devient OFF
si le texte du bouton est OFF, le texte devient ON
Le langage JavaScript (abrégé JS par la suite) nous permet d'exprimer une description similaire dans un format compréhensible par le navigateur.
JavaScript
Dans le dossier 01_evenements
de l'activité, vous trouverez un fichier HTML evenements.html
.
Ouvrez-le d'abord avec un navigateur. Vous devriez voir une page avec Hello, world !
centré.
Ouvrez-le ensuite avec un éditeur de code. Vous pouvez constater la présence d'un élément script
dans le head
:
Il indique au navigateur que le comportement de la page est renseigné dans le fichier evenements.js
. Au moment de charger la page, le navigateur va donc également charger le fichier evenements.js
, et executer le code JS qui s'y trouve.
Console
Essayons d'observer ce comportement.
Dans le fichier JS, ajoutez la ligne suivante :
console.log
est l'équivalent en JS de print
en Python. N'oubliez pas le ;
!
Rechargez la page 01_evenements.html
dans le navigateur. Et... rien ne se passe ?
C'est normal, console.log
n'affiche pas du texte dans la page web, mais dans la console du navigateur. Pour voir la console dans Firefox, on appuie sur F12
, ce qui fait apparaître les outils développeur :
Puis on sélectionne l'onglet console
:
Et on peut voir notre Bonjour !
apparaître !
C'est dans la console que seront affichés les messages d'erreur de JS, comme par exemple une erreur de syntaxe. On pourra également s'en servir pour afficher des valeurs pour débogger notre code. A noter que, comme dans la console de thonny, on peut écrire du code JS directement dans la console.
chargement de page
Essayons maintenant de modifier la page web à l'aide du JS. Ajoutez la ligne suivante dans le fichier JS :
Dans cette ligne, document
représente la page web.
La méthode getElementById
permet de récupérer un élément HTML à partir de son identifiant, ici affichage
. Cet élément corresponds, dans le HTML, à :
innerHTML
est le contenu de l'élément (pour l'instant, Hello, world !
). Donc, après l'execution de la ligne, on devrait avoir :
Essayez de recharger la page dans le navigateur. Vous devriez avoir un message d'erreur :
Il nous indique que getElementById("affichage")
a renvoyé null
, autrement dit que l'élement d'identifiant affichage
n'existe pas. Mais pourtant, il est dans notre code HTML, non ?
En fait, c'est parce qu'au moment où le code JS est exécuté, notre élement affichage
n'existe pas encore, puisque le navigateur n'a pas encore chargé la page.
On va donc faire en sorte que notre code s'execute quand la page est chargée. En JS, quand la page est chargée, l'élement window
emmet un évènement load
. On va donc ajouter notre modification de la page comme une réaction à cet évènement.
On commence par définir une fonction qui décrit la réaction :
Puis on l'enregistre comme une réaction à l'élément load
sur la fenêtre :
Rechargez la page, vous devriez maintenant voir apparaître Bravo !
à la place de Hello, world !
.
window
représente la fenêtre de la page. addEventListener
est une méthode qui permet d'ajouter une réaction à un évènement. Le premier paramètre est le nom de l'évènement, ici "load"
. Le second paramètre est une fonction de la réaction.
Autre syntaxe
En JavaScript, on peut définir des fonctions sans leur donner de nom directement comme un paramètre :
C'est très utile quand on définit des réactions. On aurait pu définir la fonction de réaction directement au moment de l'enregistrer comme une réaction :
Cette manière de représenter un programme comme une réaction à des évènements est appelé programmation évènementielle. Elle peut prendre de nombreuses formes et se retrouve dans de nombreux langage. Elle est omniprésente dans la conception d'interfaces graphiques et web, pour laquelle elle est particulièrement adaptée.
Activité 2 : clic sur un bouton
Vous pouvez trouver dans le dossier de l'activité 2 une page web qui comporte un bouton et un texte qui invite à cliquer sur le bouton. On veut écrire le code JS de la page dans le fichier clic.js
de manière à ce que si l'on clique sur le bouton, le texte devienne Bravo !
.
Pour commencer, on peut observer la page à l'aide de l'inspecteur de code. Le bouton a pour identifiant clique-ici
, et le texte a pour identifiant affichage
.
Il nous faut donc écrire une réaction qui change le texte de l'affichage en Bravo !
.
On peut simplement réutiliser une partie du code vu à l'activité précédente :
Ensuite, on veut, une fois la page chargée, enregistrer notre affichage comme une réponse à l'évènement click
sur le bouton.
function reaction_page_chargee() {
document.getElementById("clique-ici").addEventListener("click", afficher_bravo);
}
Finalement, on ajoute la réaction de la page à l'évènement de chargement de la page :
Activité 3 : compteur
Vous pouvez trouver dans le dossier de l'activité 3 une page web qui comporte un bouton et un texte, 0. On veut écrire le code JS de la page dans le fichier compteur.js
de manière à ce que si l'on clique sur le bouton, le nombre représenté dans la partie texte est augmenté de 1.
Aide 1
Pour créer une variable en JS, on utilise le mot clé let
:
Aide 2
Pour convertir une chaîne de caractère en entier, on utilise :
Par exemple :
Pour convertir un entier en chaîne de caractère, on utilise :
Par exemple :
Aide 3
Commencez par écrire une fonction ajouter_1
qui:
- récupère le texte de l'affichage
- la convertis en entier
- lui ajoute 1
- convertis le résultat en chaîne
- en fait le texte de l'affichage
Puis inspirez-vous du code de l'activité précédente pour enregistrer cette fonction comme réaction à l'évènement du clic sur le bouton.
Activité 4 : intervalle
Vous pouvez trouver dans le dossier de l'activité 4 une page web qui comporte un texte représentant un nombre, 0. On veut écrire le code JS de la page dans le fichier intervalle.js
de manière à ce que chaque seconde, le nombre soit augmenté de 1.
Aide 1
Vous pouvez réutiliser la fonction ajouter_1
de l'activité précédente.
Aide 2
En JS, la fonction setInterval
permet d'appeler une fonction à intervalle régulier, par exemple pour appeler une fonction hello
chaque seconde, on fait :
Aide 3
Quand la page web est chargée, utilisez la fonction setInterval
pour appeler chaque seconde la fonction ajouter_1
.
Activité 5 : chronometre
Nous allons faire un chronomètre minimaliste.
Vous pouvez trouver dans le dossier de l'activité 5 une page web qui comporte un bouton et un texte représentant un nombre, 0. On veut écrire le code JS de la page dans le fichier chronometre.js
, pour que la page se comporte de la manière suivante :
Quand on clique sur le bouton :
- Si le texte du bouton est
Start
, alors le texte du bouton devientStop
, et le chronomètre démarre : le nombre est augmenté de 1 à chaque seconde. - Si le texte du bouton est
Stop
, alors le texte du bouton devientReset
, et chronomètre s'arrête. - Si le texte du bouton est
Reset
, alors le texte du bouton devientStart
, et le nombre est remis à zéro.
Aide 1
En JS, l'instruction conditionnelle if
a la syntaxe suivante :
Par exemple, si on veut tester que la variable a
a la valeur "Start"
, on fait :
Le if... else if... else
est un peu simulaire :
Aide 2
La fonction setInterval
retourne un identifiant qui permet d'arrêter la répétition à l'aide de la fonction clearInterval
.
Vous pouvez, par exemple, le stocker dans une variable déclarée directement dans le fichier chronometre.js
, en dehors de toute fonction.
Activité 6 : test de réaction
Et si on testait nos propres capacités de réaction ?
Vous pouvez trouver dans le dossier de l'activité 6 une page web avec un élément de texte, initialement Cliquez ...
. L'idée est simple :
Si l'utilisateur clique n'importe où sur la page:
-
Si le texte de la page est
Cliquez ...
:- Le texte passe à
Attendez ...
- L'arrière plan de la page change de couleur
-
Un compte à rebours aléatoire en milisecondes est mis en place, entre 5 et 10 secondes. A la fin du compte à rebours :
- Le texte passe à
CLIQUEZ !!!
- L'arrière plan de la page revient à sa couleur initiale.
- Un chronomètre démarre.
- Le texte passe à
- Le texte passe à
-
Si le texte de la page est
Attendez ...
:- La page reprends sa couleur initiale
- Le texte devient
Trop tôt !
. - Le compte à rebours est arrêté ou ignoré.
-
Si le texte de la page est
CLIQUEZ !!!
:- Le texte devient la valeur du chronomètre, en milisecondes, suivi de
ms
. - Le chronomètre est arrêté
- Le texte devient la valeur du chronomètre, en milisecondes, suivi de
-
Si le texte de la page est différent de toutes ces options :
- Le texte devient
Cliquez ...
- Le texte devient
Remarque 1
Dans cette activité, vous êtes autorisés à modifier le CSS et le HTML de la page pour arriver à vos fins. A noter toutefois qu'il est possible de faire tout en JS, sans toucher au HTML ou au CSS.
Remarque 2
Il n'y a pas d'aide particulière, parce que c'est une activité de fin de cours, donc c'est à vous de réfléchir. Toutefois, si vous pensez avoir besoin d'aide, vous pouvez demander au professeur, qui vous donnera de l'aide ou vous orientera vers des ressources où vous pourrez trouver des solutions à vos problèmes.
Remarque 3
C'est presque une aide... Mais il vous est conseillé de vous attaquer au problème petit à petit. Commencez par exemple par trouver comment changer la couleur de l'arrière plan de la page, puis comment créer un nombre aléatoire, puis comment faire un compte à rebours. Définissez des fonctions pour chaque tâche.