M3203 - Programmation objet et événementielle - TP3
Objectifs de la séance
- Rappels sur la notion d'objet
- Savoir créer et manipuler des classes en Javascript
Pré-requis
- Connaître les bases de la syntaxe en Javascript
Avant de commencer, faire la fiche sur la programmation orientée objet ici ici.
Exercice 1 : Vu, ou pas
Objets DOM tableaux boucles
Pour commencer, vous allez créer un objet représentant une vidéo avec quelques propriétés pour stocker son titre, ses acteurs et si vous l'avez vue ou non. Ensuite, vous afficherez ces informations dans la page HTML- Téléchargez le fichier ci-dessus et enregistrez-le
- Écrivez un objet
video
qui possède ces propriétés :- La propriété
titre
, une chaîne de caractères - La propriété
acteurs
, un tableau de chaînes de caractères, chaque élément étant le nom de l'un des acteurs de la vidéo - La propriété
vu
, un booléen indiquant si vous avez déjà vu la vidéo
- La propriété
- Construisez une phrase du type "J'ai vu/Je n'ai pas vu la vidéo Y avec les acteurs A, B, C"
- Affichez la phrase dans le corps du document HTML
Exercice 2 : Compte à rebours
Classes Objets DOM
Vous allez créer un compte à rebours qui va faire défiler les heures, minutes, secondes et centièmes de secondes sur la page HTML. Le compte à rebours sera défini par la classeCountDown
que vous écrirez dans le fichier "countdown.js". La page HTML ne fera que créer un objet à partir de la classe, comme ceci :
- Téléchargez les fichiers ci-dessus et enregistrez-les
- Créez la classe
CountDown
dans le fichier countdown.js comme décrit ci-dessus. - Déclarez le constructeur qui prend en paramètre une seule variable représentant le temps initial du compte à rebours (en secondes). Ensuite, dans le constructeur, initialisez les propriétés :
time
, le temps initial du compte à rebours en millisecondes, à partir de la valeur passée en paramètredisplay
, l'élément HTML d'identifiant countdown où est affiché le compte à reboursintervalID
, sans valeur au début, ce sera l'identifiant de l'intervalle de fonctionnement du compte à rebours
- Écrivez une méthode
getHours
qui renvoie les heures restantes dans le compte à rebours (voir l'explication en jaune en dessous) - Écrivez une méthode
getMinutes
qui renvoie les minutes restantes dans le compte à rebours - Écrivez une méthode
getSeconds
qui renvoie les secondes restantes dans le compte à rebours - Écrivez une méthode
getHundredthSeconds
qui renvoie les centièmes de secondes restants dans le compte à rebours - Écrivez la méthode
timer
qui va :- Diminuer le temps
this.time
de 100 s'il est strictement positif - Afficher le temps en heures, minutes, secondes, centièmes de secondes dans l'élément
this.display
. Utilisez les méthodes que vous venez d'écrire.
- Diminuer le temps
- Écrivez la méthode
start
qui va lancer la méthodetimer
toutes les 100 millisecondes avecsetInterval
. Pensez àbind(this)
! - Dans la méthode
timer
, arrêtez l'intervalle si le temps est égal à 0. - Dans le constructeur, ajoutez un appel à la méthode
start
.
Pour obtenir le temps en minutes à partir d'un temps time
exprimé en millisecondes par exemple, vous pouvez utiliser ceci :
timeMinutes = Math.floor((time / (1000 * 60)) % 60 );
Exemple avec time = 3700000
millisecondes qui équivaut à 3700 secondes, soit 3600 secondes + 100 secondes soit 1 heure, 1 minute et 40 secondes :
- On convertit le temps en millisecondes en minutes :
time / (1000 * 60) = 61.66666
minutes - On garde le reste de la division par 60, c'est-à-dire qu'on enlève les heures. Il reste donc
(time / (1000 * 60)) % 60 ) = 1.66666
minutes - Et on arrondit ce résultat avec
Math.floor
, ce qui donne bien 1 minute
Exercice 3 : PhotoSwiper
Classes Objets Évènements DOM Tableaux
Vous allez faire un carrousel d'images qui défileront automatiquement à intervalle régulier. On pourra arrêter le défilement en survolant l'image avec la souris et le reprendre en dégageant la souris. Les images comporteront une légende en surimpression. Pour cela vous allez écrire deux classes :- La classe
Photo
qui représentera une image du carrousel - La classe
PhotoSwiper
qui représentera le carrousel animé
- Téléchargez les fichiers ci-dessus et enregistrez-les
- Écrivez la classe
Photo
. Elle comporte seulement un constructeur qui prend en paramètre une url et une description et initialise les propriétés correspondantes - Déclarez la classe
PhotoSwiper
- Écrivez le constructeur de la classe prenant en paramètre un tableau de
Photo
et qui va :- Initialiser la propriété
album
, le tableau dePhoto
- Initialiser la propriété
currentImg
, l'image courante d'identifiant slideshow - Initialiser la propriété
currentDescription
, la description courante d'identifiant description - Initialiser la propriété
counter
qui représentera la position du carrousel à 0 - Déclarez la propriété
intervalID
, l'identifiant de l'intervalle
- Initialiser la propriété
- Écrivez la méthode
swipe
qui va :- Incrémenter la propriété
counter
- Réinitialiser la propriété
counter
à 0 si on est arrivé à la dernière photo - Mettre à jour la source de l'image courante
- Mettre à jour la description courante
- Incrémenter la propriété
- Écrivez la méthode
start
qui va lancer la méthodeswipe
toutes les 800ms - Écrivez la méthode
pause
qui stoppe l'intervalle - Dans le constructeur :
- Ajoutez un écouteur d'évènements qui lancera la méthode
pause
lorsque la souris survole l'image - Ajoutez un écouteur d'évènements qui lancera la méthode
start
lorsque la souris quitte l'image - Et pour finir appelez la méthode
start
pour animer le carrousel dès sa création
- Ajoutez un écouteur d'évènements qui lancera la méthode
- Dans le document HTML, suivez les instructions en commentaire pour créer des photos et instancier votre PhotoSwiper.
Le fichier photoswiper.js :
Le fichier HTML :
Le fichier HTML :
S'il vous reste du temps, vous pouvez implémenter un chronomètre au jeu des 10 secondes à partir du code de l'exercice 2.
Et s'il vous reste encore plus de temps, ajoutez trois boutons au jeu des 10 secondes pour lancer la partie, la mettre en pause et redémarrer une nouvelle partie.