1 Javascript

Transcription

1 Javascript
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
Le but de ce TP est d’apprendre à dynamiser les pages Web, d’abord en javascript pur,
et ensuite avec la librairie JQuery.
Pour debugger vos programmes, vous aurez besoin d’utiliser la console javascript. On y
accède par le menu des outils de développement. Elle apparaı̂t généralement comme un volet
sur la partie inférieure de la fenêtre du navigateur, ou dans une fenêtre séparée. La méthode
console.log(), appelée dans un script, permet d’afficher une chaı̂ne de caractères dans la
console. De plus la console fournit un interprète javascript. Testez par exemple la méthode
console.log() directement dans l’interprète de la console.
1
Javascript
Écrire les scripts demandés dans les exercices de cette section en javascript pur (pas de
librairies).
1. Tableaux.
Dans le fichier tableaux.html on retrouve un tableau HTML qui comporte une liste
d’élèves avec leur notes. Sans modifier le HTML, ajouter un script à la page qui récupère
dans une variable les notes des élèves, en calcule la moyenne, le nombre, et le nombre de
notes supérieures ou égales à 10. Ces valeurs devront être affichées au chargement de la
page pour compléter les paragraphes correspondants (i.e. moy, num et num10).
Pour lire les valeurs des cases d’un tableau HTML, on pourra utiliser l’une ou l’autre
des alternatives suivantes (essayez les deux) :
— La propriété rows d’un objet <table>. Il s’agit d’un objet qui contient la collection
des lignes (éléments <tr>) d’une table. De façon similaire, si ligne est un objet qui
représente un élément <tr>, alors ligne.cells est la collection des éléments <td>
de la ligne.
— La méthode querySelectorAll() de l’objet document, pour sélectionner des éléments HTML avec un sélecteur CSS.
2. Remplacement global.
Créer une page Web comportant une zone de texte (<textarea>) et deux champs de
texte, où l’utilisateur peut rentrer 1) un texte 2) un mot d’origine à chercher dans le
texte et 3) un nouveau mot. De plus il y aura une checkbox pour spécifier si la recherche
doit être insensible à la casse. Prévoir également un bouton ”Remplacer tout”.
Ajouter un script à la page qui fait en sorte que quand l’utilisateur clique sur le bouton,
toutes les occurrences du premier mot dans le texte seront remplacées par le nouveau mot.
Le remplacement global sera sensible ou pas à la casse, selon la valeur de la checkbox.
On pourra utiliser la méthode replace() du prototype String, en lui passant une expression régulière (RegExp) avec les bonnes options de recherche.
3. Prototypes et héritage “classique”
En utilisant le paradigme d’héritage de prototypes de Javascript, simuler l’héritage des
langages à objets basés sur les classes, dans la situation suivante.
Soit Compte le constructeur suivant avec son prototype associé :
function Compte(montant, proprietaire) {
this.montant = montant;
this.proprietaire = proprietaire;
}
Compte.prototype.taux = 0.02; //taux d’intér^
et de tous les comptes
Compte.prototype.E2D = 1.074; //euros vers dollars
Compte.prototype.montantD = function() {
return this.montant * this.E2D;
}
1
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
On veut définir un constructeur ComptePlus de comptes “plus”. Un compte “plus” est
un compte qui a un taux d’intérêt plus avantageux et une propriété additionnelle durée
(i.e. la durée de l’avantage). Chaque objet créé avec le constructeur ComptePlus doit
donc avoir un montant, un propriétaire, une durée, un taux d’intérêt, un taux d’échange
(E2D) et une méthode de conversion montantD(). Le constructeur prend en paramètre
les trois premières propriétés.
La solution doit satisfaire les conditions suivantes :
— E2D et montantD() doivent etre partagés par tous les comptes (classiques et “plus”).
— Le taux d’intérêt doit être partagé par tous les comptes “plus”, mais il est diffèrent
du taux appliqué aux comptes classiques, il a valeur 0.04.
— Chaque compte “plus” a son propre montant, son propre propriétaire et sa propre
durée.
— Si on ajoute une propriété ou méthode x au prototype des comptes (Compte.prototype),
tous les comptes “plus” devront hériter x.
— Si on modifie le constructeur Compte, pour ajouter une nouvelle propriété ou méthode
x, tous les comptes “plus” devront hériter x.
Pour tester, dans un script définir les constructeurs Compte et ComptePlus, ainsi que les
prototypes associés, puis :
— créer un compte classique C et et deux comptes “plus” P1 et P2 ; ensuite affecter la
valeur 1.080 à Compte.prototype.E2D, et afficher les trois montants en dollars. Il
doivent tous utiliser le taux d’échange 1.080.
— afficher les taux d’intérêt des trois comptes. Vérifier que le taux de P1 et P2 est 0.04
et celui de C est 0.02.
— Modifier le constructeur Compte (sans changer ses paramètres) : ajouter une nouvelle
propriété à this avec une valeur par défaut. Vérifier que cette propriété est accessible
depuis les trois comptes (sans qu’aucun autre changement soit nécessaire) .
Pour afficher un résultat dans cet exercice, vous pouvez utiliser la méthode Javascript
document.write(), qui écrit dans le document HTML, en effaçant d’abord tout son
contenu. Par ailleurs il est conseillé d’utiliser cette méthode uniquement en phase de
test.
4. horloge.
Créer une page Web qui affiche une horloge avec un cadran en chiffres, une aiguille
pour les heures et une aiguille pour les minutes. Un bouton “Lancer” permet de lancer
l’avancement des aiguilles dans le temps, et un bouton “Arrêter” l’interrompt. Suivre les
indications suivantes.
— Créer un document HTML minimal qui comporte les boutons “Lancer” et “Arrêter”
ainsi que le CSS de la page, si besoin.
— Télécharger le fichier horloge.js et le rattacher au document HTML. Pour vous
faciliter la tâche, ce fichier contient déjà la declaration de deux tableaux Javascript
représentant les coordonnées de chaque chiffre du cadrant, de 1 à 12 (le chiffre 12
est représenté par l’indice 0). Completer le script horloge.js comme indiqué par les
étapes suivantes.
— Au chargement de la page le script doit créer l’horloge dans la page. Pour tout i de 1
à 12, le chiffre i sera crée comme un bloc <div><p>i</p></div>. De façon similaire,
le centre de l’horloge sera représenté comme <div><p>o</p></div>. L’aiguille des
heures sera créé comme un bloc <div> <img src="rond-rouge.png"> </div> et
celle des minute sera <div> <img src="rond-noir.jpg"> </div>. Le CSS devra
fixer la taille de ces deux images à 21px × 21px.
Tous ces blocs (<div>) doivent avoir position absolue. Les blocs des chiffres et du
centre doivent être positionnés aux coordonnées (top et left) indiquées par les tableaux et variables correspondants (attention, le chiffre 12 correspond à l’indice 0
dans ces tableaux).
2
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
Si (top, left) sont les coordonnées d’un chiffre, pour bouger une aiguille sur ce
chiffre, son bloc doit être positionné aux coordonnées (top+10, left).
Pour créer et modifier des éléments dans le document, on pourra utiliser les méthodes document.createElement() et document.body.appendChild(), ainsi que les
propriétés id, className, innerHTML et style des tous les éléments du DOM, si nécessaire.
— Associer au bouton “Lancer” une fonction qui fait avancer de 5 minutes la position
des aiguilles sur le cadrant. Utiliser la méthode document.setTimeout() pour que
la fonction soit appelée automatiquement à intervalles réguliers.
— Avec le bouton Arrêter, gérer la possibilité d’interrompre l’avancement automatique
des aiguilles.
Prendre soin de factoriser le code en définissant plusieurs fonctions.
2
JQuery
JQuery est une librairie JavaScript facile à apprendre et qui va vous faciliter la programmation en JavaScript. JQuery n’est en fait qu’un seul et unique fichier JavaScript,
téléchargeable sur le Web (http://jquery.com/download/) et qui porte l’extension .js.
JQuery est aussi herbergé par des content delivery networks, il est donc possible d’inclure
JQuery dans ses pages Web depuis un CDN :
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
1. Premiers pas avec JQuery.
Créez une page Web qui contient un paragraphe “ceci est un paragraphe”. En utilisant
JQuery, faites en sorte que lorsque la souris survole le paragraphe, le texte change pour
devenir “ceci n’est pas un paragraphe”.
2. Blocs et texte.
(a) Créez une page web avec un header, un footer, et un bloc centré avec bordure rouge,
avec le message “Cliquez ici”.
(b) Lorsqu’on passe la souris sur le bloc rouge, un message “Attention, vous entrez dans
la zone rouge” se manifeste dans la console.
(c) Lorsqu’on presse le bouton de la souris sur le bloc rouge, la bordure du bloc devient
verte et un message vert “up” apparait dans le header, à la suite de ce qui y figurait
déjà.
(d) Lorsqu’on relâche le bouton de la souris la bordure du bloc redevient rouge et un
message rouge “down” apparait dans le footer, à la suite de ce qui y figurait déjà.
(e) Lorsqu’on clique sur un mot du header ou du footer, “up” ou “down”, il disparaı̂t
(mais on ne supprime qu’un mot à la fois).
3. Effets
Créez un document HTML comportant une liste de trois éléments, et un bouton“Afficher”
juste au-dessus.
(a) Attachez au document HTML un script qui fait en sorte que la liste ne soit pas
affichée au chargement et que, lorsqu’on clique le bouton, la liste déroule avec un
effet.
(b) Faire en sorte que lorsqu’on clique sur le bouton et que la liste apparaı̂t, le texte
affiché sur le bouton soit le mot “Masquer”. Lorsqu’on le clique à nouveau, la liste
doit disparaitre en douceur et le texte du bouton doit devenir “Afficher”.
(c) Ajouter un paragraphe “Bonjour” de grande taille, pas visible, et un bouton “Bienvenue”. À l’aide de la méthode animate(), faire en sorte que lorsqu’on clique sur ce
3
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
bouton le message “Bonjour” traverse lentement l’écran de gauche à droite, pour redisparaitre en traversant l’extrémité droite de la page. Modifier ensuite l’animation
pour que le message “Bonjour” s’arrête au centre de la page.
4. Faire défiler des images
(a) Créez une page Web qui comporte un bloc d’identifiant “defile”, contenant une suite
de blocs, chacun contenant une image. Les images sont centrées dans la page, mais
initialement non affichées.
(b) À l’aide des sélecteurs JQuery, sélectionner les éléments img contenus dans le bloc
“defile” (sauvegarder la sélection dans une variable pour plus d’efficacité). Ensuite,
à l’aide des méthodes JQuery de parcours du DOM, sélectionner la première image
(d’index 0) et faire en sorte que seule cette image apparaisse à l’écran.
(c) Ajouter un bouton “suivant” et faire en sorte que lorsqu’on clique sur ce bouton on
passe à l’image suivante (i.e celle contenue dans le bloc suivant), de façon circulaire.
(d) Utiliser la fonction setInterval de javascript pour faire défiler automatiquement
les images toutes les 5 secondes.
(e) Maintenant remplacer les changements d’image (un peu tristes) par les effets suivants :
— l’image précédente disparaı̂t lentement (effet fade), et ensuite la suivant apparait
avec l’effet inverse ;
— l’image suivante se déroule vers le bas (effet slide), et la précèdent disparait avec
l’effet inverse.
Dans les deux cas, attention à ce que l’image suivante n’apparaisse pas avant que la
première ait complètement disparu (dans le cas contraire, quel serait le problème ?).
(f) Remplacer par un effet de “rotation” dans le changement d’image : l’image précédente défile vers la gauche en sortant de la page, ensuite l’image suivante défile de
la droite vers le centre de la page pour prendre sa position. À cet effet, utiliser la
fonction JQuery animate() et des positions CSS relatives pour les images.
5. Tic-tac-toe (Bonus) À l’aide des techniques étudiées (html, css, javascript/jQuery),
réalisez un jeu de Tic-tac-toe (utilisateur contre ordinateur).
3
Formulaires
Les formulaires sont l’un des principaux moyens d’interaction au sein d’une page web. Ils
sont introduits par la balise <form> et constitués de champs décrits par des balises <input>,
<select> ou encore <textarea> auxquelles sont associés des labels (<label>).
1. Formulaire d’inscription
(a) Créer une page html avec une feuille de style associée.
(b) Créer un formulaire avec les champs suivants et les labels associés :
— état civil (M. ou Mme) ;
— nom ;
— prénom ;
— nom complet (désactivé) ;
— date de naissance ;
— niveau en javascript ;
— couleur préférée ;
— mot de passe ;
— mot de passe (confirmation) ;
— afficher le mot de passe (oui ou non) ;
— description (texte) ;
4
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
— bouton réinitialiser (pour réinitialiser le formulaire) ;
— bouton envoyer (pour envoyer le formulaire).
6. A l’aide
jQuery, faites
sorteà que
le champs
complet”
change faire
de
(c) En HTML5
seul de
(attributs
min etenmax,
spécifier
à la ”Nom
main pour
l’instant),
valeur
en fonction
de l’état
civil, du nom,
du prénom.
en sorte que
le champ
« date
de naissance
» ne et
puisse
contenir que des dates entre
7. A l’aide
faites en sorte que la valeur numérique du champs ”Niveau
aujourd’hui
et il de
y ajQuery,
100 ans.
en javascript” apparaisse à côté de celui-ci.
8. A l’aide de jQuery, faites en sorte que lorsque l’on sélectionne l’option ”Afficher
À partir de
utilisera
jQuery
pour affichent
les questions
motmaintenant,
de passe”, lesondeux
champs
précédents
le motqui
de suivent.
passe en clair.
Le champ
nomdecomplet
» doit
valeur ”Envoyer”
en fonction
l’état lorsque
civil, du
9. A «l’aide
jQuery, faites
en changer
sorte quede
le bouton
soit de
désactivé
l’un
des
champs
n’est
pas
rempli.
nom et du prénom (p. ex. si l’utilisateur a entré respectivement « M. », « Dupont »
10. A»,l’aide
de jQuery,
faites
en Toto
sorte que
les noms
et « Toto
il faudra
afficher
« M.
Dupont
»). des champs vides apparaissent
en rouge.
La valeur numérique du champ « niveau en javascript » doit apparaı̂tre à côté de
11. A l’aide de jQuery, faites en sorte que le bouton ”Envoyer” soit désactivé si les
celui-ci.
champs ”Mot de passe” et ”Mot de passe (confirmation)” ne contiennent pas la
Lorsqu’onmême
sélectionne
valeur. l’option « afficher le mot de passe », les deux champs précédents 12.
affichent
le
mot
de passe
A l’aide de
jQuery,
faitesen
en clair.
sorte que le nom du champs ”Mot de passe (confirmation)”
apparaisse
en
rouge
tant qu’il
est des
videchamps
ou que n’est
son contenu
n’est pas
Le bouton « envoyer » est désactivé lorsque
l’un
pas rempli.
égal à celui du champs ”Mot de passe”.
Le nom des champs vides apparaı̂t en rouge.
13. A l’aide de jQuery, faites en sorte que le champs ”Date de naissance” ne puisse
Le boutoncontenir
« envoyer
estdates
désactivé
lorsque lesetdeux
de passe
» ne
que »
des
entre aujourd’hui
il y a champs
100 ans, «enmot
générant
la date
jour avec javascript.
coı̈ncidentdupas.
14.
A
l’aide
faites en sorte que,
lorsque l’on
soumettant
le formulaire,
celuiLe champ « mot de
de jQuery,
passe (confirmation)
» apparaı̂t
en rouge
que son contenu
ci disparaisse au profit d’un texte contenant toutes les informations (du type
n’est pas égal à celui du champ « mot de passe ».
”Bonjour M. Blah Blah, vous êtes né le...”).
(d) À l’aide du CSS, créer une mise en page similaire à celle de la figure ci-dessus.
(e)
(f)
(g)
(h)
(i)
(j)
(k)
(l) Le champ « date de naissance » ne peut contenir que des dates entre aujourd’hui et
il y a 100 ans, en générant la date du jour avec javascript.
2
(m) Lorsqu’on soumet le formulaire, celui-ci disparaı̂t au profit d’un texte contenant
toutes les informations (du type : « Bonjour M. Toto Dupont, vous êtes né le . . . »).
2. QCM
(a) Créer une nouvelle page contenant un QCM avec 5 questions, qui auront chacune 3
réponses possibles.
5
ProgWeb
TD n◦ 3
Javascript et JQuery
L3 Informatique
2015–2016
(b) Ajouter un bouton « Corriger » qui vérifie les réponses : pour chaque question, si la
bonne réponse est sélectionnée, la question apparaı̂t en vert, sinon elle apparaı̂t en
rouge.
(c) De plus (toujours après appui sur le bouton « Corriger »), lorsqu’une mauvaise
réponse a été sélectionnée, la réponse sélectionnée apparaı̂t en rouge et la bonne
réponse en vert.
Lorsque la bonne réponse a été sélectionnée, elle apparaı̂t en vert.
(d) Lorsque l’utilisateur clique sur « Corriger » alors que certaines questions n’ont pas
de réponse sélectionnée, alors la correction n’a pas lieu et ces questions apparaissent
en orange.
(e) Après la correction, un message apparaı̂t sous le QCM avec la note obtenue.
6