M3203 - Programmation objet et événementielle - TP2
Objectifs de la séance
- Comprendre la notion d'évènements et de programmation évènementielle
- Savoir gérer des évènements en Javascript
Pré-requis
- Être capable de manipuler le DOM
Avant de commencer, faire la fiche sur les évènements ici ici.
Exercice 1 : Alertes !
Évènements DOM
Pour commencer, vous allez tester quelques types d'évènements différents qui réagiront en lançant des alertes.- Téléchargez le fichier ci-dessus et enregistrez-le
- Écrivez une fonction
message
qui lance une alerte avec le texte "Test" -
- Stockez dans une variable le bouton d'identifiant
go
- Ajoutez lui un écouteur d'évènements qui appelle la fonction
message
lors d'un clic de souris.
- Stockez dans une variable le bouton d'identifiant
-
- Stockez dans une variable l'image d'identifiant
cat
- Ajoutez lui un écouteur d'évènements qui appelle la fonction
message
lors du survol de l'image.
- Stockez dans une variable l'image d'identifiant
-
- Stockez dans une variable le champ de saisie d'identifiant
key
- Ajoutez lui un écouteur d'évènements qui appelle la fonction
message
lorsqu'une touche est enfoncée.
- Stockez dans une variable le champ de saisie d'identifiant
Exercice 2 : Diapos de vacances
Évènements DOM tableaux
On va créer un diaporama qui va permettre de faire défiler des images en cliquant sur des boutons "Suivant" et "Précédent". Le document ci-dessous contient le tout début du script où est déclaré le tableaualbum
qui contient des url vers des photos.
- Téléchargez le fichier ci-dessus et enregistrez-le
- À la suite du script, déclarez une variable
counter
et initialisez-la à 0. Elle représentera l'indice de la photo affichée dans le tableau. - Stockez l'élément image avec l'identifiant
diapo
dans une variablephoto
- Écrivez la fonction
previousPhoto
qui :- Décrémente le compteur s'il est strictement supérieur à 0 (et sinon on ne fait rien : c'est qu'on est au tout début de l'album)
- Modifie l'attribut src de
photo
avec la nouvelle url correspondant au compteur dans le tableaualbum
- Écrivez la fonction
nextPhoto
qui :- Incrémente le compteur s'il ne dépasse pas la taille du tableau
- Modifie l'attribut src de
photo
avec la nouvelle url correspondant au compteur dans le tableaualbum
- Ajoutez un écouteur d'évènements sur le bouton d'identifiant
next
qui appelle la fonctionnextPhoto
lors d'un clic de souris - Ajoutez un écouteur d'évènements sur le bouton d'identifiant
previous
qui appelle la fonctionpreviousPhoto
lors d'un clic de souris - Testez !
Exercice 3 : Barre de progression, le retour
Évènements DOM
Vous allez programmer une barre de progression contrôlable avec des boutons "start" et "stop". Voici la page HTML :- Téléchargez les fichiers ci-dessus et enregistrez-les
- Déclarez une variable
counter
et initialisez là à 0. Elle représentera la valeur de la progression de la barre. - Déclarez une variable
interval
sans lui affecter de valeur. Elle représentera l'identifiant de l'intervalle de progression de la barre. - Écrivez une fonction
addDiv
qui incrémente le compteurcounter
de 1 et met à jour la largeur de la div d'identifiantprogressbar
avec sa nouvelle valeur (en %). - Écrivez une fonction
startBar
qui appelle la fonctionsetInterval
qui exécuteraaddDiv
toutes les 100 millisecondes. La valeur de retour de la fonctionsetInterval
sera stockée dans la variableinterval
. - Écrivez une fonction
stopBar
qui appelle la fonctionclearInterval
qui prendra en paramètre d'entrée l'identifiant de l'intervalle. - Ajoutez les écouteurs d'évènements sur les boutons d'identifiant
start
etstop
qui appellent respectivement les fonctionsstartBar
etstopBar
lors d'un clic de souris.
Exercice 4 : Tama
Évènements DOM




Vous allez programmer un jeu de Tamagotchi mettant en scène le petit chien Tama. Le jeu permettra de nourrir Tama et de le caresser. S'il n'est pas nourri ou trop malheureux, il mourra. Voici la page HTML pour débuter :
- Téléchargez les fichiers ci-dessus et enregistrez-les
- Stockez dans deux variables
hunger
ethappiness
les éléments span avec les identifiants correspondants. - Écrivez la fonction
tamaLife
qui va simuler les étapes de la vie de Tama :- Elle ajoute 5 points à la valeur de l'appétit de Tama.
- Elle enlève 5 points à la valeur du bonheur de Tama.
- Si la faim est supérieure à 70 ou le bonheur inférieur à 30, Tama est malheureux. L'attribut src de l'élément
tama
prend cette valeur :"http://chloecabot.com/mmi/M3203/img/tama_unhappy.png"
. - Dans le cas contraire, Tama est dans un état normal. Son image est donc celle-ci :
"http://chloecabot.com/mmi/M3203/img/tama_alive.png"
. - Cas particulier : si la faim est égale à 100 ou le bonheur à 0, Tama meurt. L'attribut src de l'élément
tama
prend cette valeur :"http://chloecabot.com/mmi/M3203/img/tama_dead.png"
.
- Lancez la fonction
tamaLife
toutes les secondes avecsetInterval
. Stockez bien la valeur du retour de la fonction dans une variableinterval.
- Dans la fonction
tamaLife
, quand Tama meurt, ajoutez un appel àclearInterval
pour stopper les compteurs. - À ce stade, vous pouvez tester votre Tamagotchi. Le bonheur et l'appétit de Tama vont progresser jusqu'à ce qu'il meure, sans que vous ne puissiez rien faire !
- Écrivez la fonction
setHappiness
qui va :- Modifier la valeur du bonheur à 100, le maximum.
- Changer l'image de Tama. Son attribut src prend cette valeur :
"http://chloecabot.com/mmi/M3203/img/tama_happy.png"
.
- Ajoutez un écouteur d'évènements sur l'image d'identifiant
tama
qui appelle la fonctionsetHappiness
au survol de l'image. - Écrivez la fonction
setFood
qui va :- Récupérer la quantité de nourriture qui est donnée à Tama par le champ input d'identifiant
food
. Pensez à vérifier que la valeur récupérée est un nombre entier à l'aide des fonctionsparseInt
etisNaN
. - Diminuer la valeur de l'appétit de Tama de cette même quantité.
- Récupérer la quantité de nourriture qui est donnée à Tama par le champ input d'identifiant
- Ajoutez un écouteur d'évènements sur le bouton d'identifiant
go
qui appelle la fonctionsetFood
quand le bouton est cliqué.
La fonction
parseInt(valeur)
permet de convertir valeur
en entier. parseInt("5")
vaut 5. parseInt("toto")
vaut NaN
(pour Not a Numeric, on a pas pu convertir toto en entier).
La fonction isNaN(valeur)
permet de vérifier si valeur
est une valeur numérique. isNaN(5)
renvoie Faux, isNaN("toto")
renvoie Vrai.