04-Javascript

Transcription

04-Javascript
Conception d’un site web
NFA074, 6 ECTS
Chapitre 4
Javascript / jQuery
Le plus grand soin a été apporté à la réalisation de ce support pédagogique afin de vous fournir une
information complète et fiable. Cependant, le Cnam Champagne-Ardenne n'assume de responsabilités,
ni pour son utilisation, ni pour les contrefaçons de brevets ou atteintes aux droits de tierces personnes
qui pourraient résulter de cette utilisation.
Les exemples ou programmes présents dans cet ouvrage sont fournis pour illustrer les descriptions
théoriques. Ils ne sont en aucun cas destinés à une utilisation commerciale ou professionnelle.
Le Cnam ne pourra en aucun cas être tenu pour responsable des préjudices ou dommages de quelque
nature que ce soit pouvant résulter de l'utilisation de ces exemples ou programmes.
Tous les noms de produits ou autres marques cités dans ce support sont des marques déposées par
leurs propriétaires respectifs.
Ce support pédagogique a été rédigé par Arnaud RENARD, enseignant vacataire au Cnam ChampagneArdenne.
Copyright  2013-2014 - Cnam Champagne-Ardenne.
Tous droits réservés.
L'utilisation du support pédagogique est réservée aux formations du Cnam Champagne-Ardenne. Tout
autre usage suppose l'autorisation préalable écrite du Cnam Champagne-Ardenne.
Toute utilisation, diffusion ou reproduction du support, même partielle, par quelque procédé que ce soit,
est interdite sans autorisation préalable écrite du Cnam Champagne-Ardenne. Une copie par
xérographie, photographie, film, support magnétique ou autre, constitue une contrefaçon passible des
peines prévues par la loi, du 11 mars 1957 et du 3 juillet 1995, sur la protection des droits d'auteur.
Décembre 2014
Javascript et jQuery
Ce chapitre va traiter de Javascript par l’intermédiaire de jQuery. Il ne s’agit pas de devenir un expert
des deux technologies, mais d’en apprendre les bases afin d’agrémenter vos pages web. En guise de
prérequis, il est considéré que vous connaissez HTML (qui permet de créer la structure d’une page web)
et CSS (qui permet de définir les styles d’affichage de la page). En outre, vous avez quelques bases de
DOM, le Document Object Model, qui est l’approche pour comprendre la structure du document HTML et
vous savez le manipuler en CSS à l’aide des sélecteurs.
En jQuery, nous allons apprendre à :
- Sélectionner un élément ou des éléments dans une page HTML ;
- Modifier le contenu d’éléments ainsi que leurs styles ;
- Réagir à des événements qui ont lieu sur la page ;
- Créer des animations
Avant de commencer, il convient de planter le décor. Javascript est un
langage de programmation qui est interprété par votre navigateur. Il ne
décrit pas la structure de la page comme le fait html, mais décrit les
actions qui doivent être effectuées. Les codes javascript seront donc
exécutés par le navigateur et ont la capacité de manipuler la page web,
d’interagir avec l’internaute et de créer des animations. C’est un
langage orienté objet à prototype, nous utiliserons donc des objets pour
manipuler des chaines de caractères (des textes) ou des nombre (ou
autres objets mathématiques). Le langage a été créé en 1995 par
Brendan Eich (photo ci-contre), alors qu’il officiait pour Netscape
Communication (une entreprise pionnière du web depuis 1994, connue
pour son navigateur Netscape dans les années 90, dissolue en 2003) et
alors qu’il était déjà membre du conseil d’administration de Mozilla.
Pour ajouter du javascript à votre page web, les quelques lignes suivantes suffisent si elles sont insérées
dans la page html :
<script>
alert("hello world");
</script>
Il est aussi possible d’écrire la totalité du code javascript dans un fichier séparé –dont l’extension est
généralement .js-, et de l’inclure dans votre page de la manière suivante.
<script src='monFichier.js'></script>
Dans les deux cas, le script sera alors exécuté par vote navigateur au moment où il est lu. Il est aussi
possible d’intégrer du javascript directement dans les balises html, mais nous ne le ferons pas.
Dans le cadre de NFA074, nous allons directement apprendre JQuery qui est une bibliothèque JavaScript
libre et multi-plateforme créée pour faciliter l'écriture de scripts côté client, dans le code HTML des pages
web. La première version de JQuery a été lancée en janvier 2006 par John Resig. Pour nous, cette
librairie va présenter un triple avantage :
- JQuery propose une utilisation de haut niveau qui permet de faire la même chose que Javascript,
mais avec beaucoup plus de souplesse et d’efficacité. Bien sûr, certaines parties seront écrites
en Javascript ;
- Le code JQuery est compatible avec les principaux navigateurs du marché. Ainsi, nous n’aurons
pas à gérer cet aspect qui peut être délicat en Javascript ;
- JQuery s’est imposé comme la référence et nombre d’extensions sont disponibles. Nous en
testerons d’ailleurs une.
Chapitre 4 : Javascript et jQuery
1 / 13
1. Sélection, événements et actions
On peut décomposer le scénario le plus classique d’utilisation de jQuery de la manière suivante :
Sélection
d'éléments
.
Gestion
d'événements
.
Action
C’est le schéma qui sera utilisé dans la suite de ce cours :
- Un certain nombre d’éléments sont sélectionnés (des images, des liens, le document, …) à l’aide
d’un sélecteur reprenant la syntaxe des sélecteurs CSS3
- Un événement est géré sur cette sélection. Il peut s’agir du clic, du double clic, du survol à la
souris, ou même d’une opération.
- Si cet événement est déclenché, un certain nombre d’actions aura lieu. Il peut s’agir de modifier
la structure DOM, ou d’intervenir sur les styles, les contenus et les attributs des éléments.
Ce schéma sera complété par la suite.
1.1. Premier exemple
En guise de premier exemple, on peut vouloir ajouter une bordure rouge lors du clic sur les images d’une
page web :
Sélection :
les images
.
Gestion de l’événement :
clic
.
Action :
ajouter une bordure
Cet exemple est disponible en ligne, pour test (et pour clics), et sera expliqué dans la suite du cours.
Aucun besoin d’afficher le code source de cette page pour le moment :
http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple1.html
Décembre 2014
Exercice 1 :
Téléchargez le fichier jquery.js et enregistrez-le dans votre répertoire de travail.
http://www.action-creation.fr/cnam/nfa074/chapitre4/jquery.js
Créez une page html et incluez-y ce fichier javascript juste avant le </body>.
Nous sommes maintenant prêts à commencer.
Vous pouvez aussi télécharger le fichier jquery.js sur le site jquery.com (http://jquery.com/). Vous y
trouverez par ailleurs toute la documentation liée à la bibliothèque. Il existe quelques sources en
français, qui ne sont pas toujours à jour. jquery-fr peut servir de base : http://www.jquery-fr.com.
1.2. L’événement fondateur : le chargement de la structure DOM
Comme il a été dit précédemment, la première étape du schéma est la sélection d’un ensemble d’élément
dans la structure DOM. Or, il faut en premier lieu nous assurer que la totalité de la structure DOM soit
chargée avant de commencer notre sélection. En effet, si l’on sélectionne les images d’un document
alors qu’une partie de la page n’est pas encore chargée, on peut aisément imaginer qu’une partie des
images ne sera pas considérée.
Avant toute chose, on va donc devoir attendre la fin du chargement de la page. En langage JQuery :
avant toute sélection, on doit attendre que l’événement « le document est chargé » soit déclenché. Cette
locution peut se traduite par le schéma suivant :
Sélection :
du document (la
structure dom du
document)
.
Gestion de l’événement :
ready sur cette sélection
(qui est déclenché quand
la structure est chargée
par le navigateur)
.
action :
afficher un message
(une alerte en javascript)
Cet exemple est disponible en ligne, pour test :
http://www.action-creation.fr/cnam/nfa074/chapitre4/exemple2.html
Penchons-nous maintenant sur le code Javascript de cette page, en le décomposant :
1.2.1. Sélection du document
$
Le signe $ (dollar) indique que l’on est en train de faire du JQuery. $ est même la fonction principale de
JQuery. Une fonction étant un ensemble d’instructions que l’on peut appeler d’un coup, juste en utilisant
le nom de la fonction, $ en l’occurrence. Une fonction admet aussi des paramètres, qui seront spécifiés
entre parenthèses. Dans le cas général, l’ensemble d’instruction de la fonction aura accès à ces
paramètres. Ainsi, une même fonction peut être utilisée avec des paramètres différents : c’est tout
l’intérêt des fonctions.
$(document)
Ici, la fonction $ est utilisée avec la variable document, qui représente le document html.
Nous avons donc sélectionné le document.
Chapitre 4 : Javascript et jQuery
3 / 13
1.2.2. Gestion de l’événement ready
$(document).ready(
);
Juste après la sélection, on utilise le . (point) suivi d’une autre fonction. Cela va indiquer que la fonction
ready va s’appliquer à la sélection effectuée par la fonction $. Avec JQuery, on a la possibilité de chainer
ainsi les fonctions, à l’aide du . (point). La fonction ready permet de gérer l’événement de chargement
de la structure de la page. C’est une fonction, donc on lui adjoint des parenthèses afin de spécifier des
paramètres. Chaque ligne de javascript se termine par un ; (point-virgule).
$(document).ready(
function(){
}
);
Une fois le document ready, un ensemble d’instruction sera défini (la partie ‘action’) au sein d’une
fonction (une ensemble d’instruction, on l’a dit tout à l’heure), d’où la définition en ligne (cad sans lui
donner de nom) de la fonction à l’aide de la structure suivante : function(){ … }. Du point de vue de
la fonction ready, la fonction définie en ligne est un paramètre.
1.2.3. Action et affichage d’un message
Les possibilités d’action sont infinies. Dans cet exemple, nous affichons juste un message à l’aide de la
fonction alert :
$(document).ready(
function(){
alert("Document chargé");
}
);
La fonction alert admet un argument qui est une chaine de caractères, délimitée par des simples quotes
ou de doubles quotes (guillemets simples ou guillemets doubles). Nous reviendrons ultérieurement sur
les chaines de caractères.
Décembre 2014
1.3. Les sélections
Les sélecteurs CSS peuvent être utilisées pour sélectionner des éléments de la structure DOM :
Sélecteur CSS
Sélecteur jQuery
Signification
ul
$('ul')
Les balises <ul>
#main
$('#main')
Les balises dont l’id est main
.rouge
$('.rouge')
Les balises qui ont la classe rouge
ul.bleu
$('ul.bleu')
La balise <ul> de classe bleu
div ul
$('div ul')
La balise <ul> contenue dans la balise
<div>
[src]
$('[src]')
Les balises qui ont un attribut src
div>ul li[name="pair"]
$('div>ul li[name="pair"]')
La balise <li> contenue directement
dans une balise <ul>, elle-même
contenue dans une balise <div>, et
dont l'attribut name vaut pair
li[name]
$('li[name]')
Les balises <li> qui possèdent un
attribut name
li[rel="28"]
$('li[rel="28"]')
Les balises <li> qui possèdent un
attribut rel de valeur 28
*
$('*')
Toutes les balises du document
a, img
$('a, img')
Les liens et les images
La sélection JQuery va sélectionner un ensemble d’éléments, c’est-à-dire 0, 1 ou plusieurs éléments.
Nous allons pouvoir utiliser cet ensemble, soit pour y positionner un gestionnaire d’événement, soit pour
effectuer quelques modifications. Nous verrons seconde possibilité par la suite.
Nous allons tout d’abord revenir en détail sur les sélecteurs en JQuery.
Chapitre 4 : Javascript et jQuery
5 / 13
1.3.1. Sélecteurs d'attributs
Sélecteur
['nom*="valeur"']
Éléments sélectionnés
Éléments qui possèdent un attribut nom qui contient (partiellement ou totalement) la
valeur spécifiée.
['nom~="valeur"']
Éléments qui possèdent un attribut nom qui contient la valeur spécifiée, délimité par
des espaces.
['nom$="valeur"']
Éléments qui possèdent un attribut nom qui se termine par la valeur spécifiée.
['nom!="valeur"']
Éléments qui ne possèdent pas l'attribut nom, ou qui possèdent un attribut
nom différent de la valeur spécifiée.
['nom^="valeur"']
Éléments qui possèdent un attribut nom qui commence par la valeur spécifiée.
1.3.2. Sélecteurs hiérarchiques
Sélecteur
Éléments sélectionnés
('p > e')
Éléments e directement descendants d'éléments p
('p + e')
Éléments e directement précédés d'un élément p
('p ~ e')
Éléments e précédés d'un élément p
:empty
Éléments qui n'ont pas d'enfant
:first-child
Premier enfant
:first
Premier élément
:last-child
Dernier enfant
:last
Le dernier élément de la sélection
:nth-child()
Élément qui est l'énième enfant de son parent
:only-child
Éléments qui sont enfants uniques de leur parent
Décembre 2014
1.3.3. Pseudo-sélecteurs d'éléments
Sélecteur
:even
Éléments sélectionnés
Éléments pairs. Exemple :
tr:even
:odd
Éléments impairs
:eq()
Élément dont l'index est spécifié. Par exemple :eq(2) pour sélectionner le troisième élément.
:gt()
Éléments dont l'index est supérieur à (greater than) l'index spécifié
:lt()
Éléments dont l'index est inférieur à (lower than) l'index spécifié
1.3.4. Sélecteurs d'éléments particuliers
Sélecteur
Éléments sélectionnés
:header
Tous les titres <h1> à <h6>
:hidden
Éléments cachés
:visible
Éléments visibles
:not()
Éléments qui ne correspondent pas au sélecteur spécifié
Chapitre 4 : Javascript et jQuery
7 / 13
1.3.5. Pseudo-sélecteurs spécifiques aux formulaires
Pseudo-sélecteur
Éléments sélectionnés
:input
Tous les éléments de type input, textarea, select et button
:button
Éléments de type button
:checkbox
Éléments de type checkbox
:checked
Éléments qui sont cochés
:radio
Éléments de type radio
:reset
Éléments de type reset
:image
Tous les boutons de type image
:submit
Éléments de type submit
:text
Éléments de type text
:password
Éléments de type password
:selected
Éléments sélectionnés
:focus
Sélectionne l'élément s'il a le focus
:enabled
Éléments validés
1.3.6. Sélecteurs utilisés en cas de résultats multiples
Pseudo-sélecteur
Éléments sélectionnés
:first
Premier élément
:last
Dernier élément
:eq()
Élément dont l'index est spécifié
:gt()
Éléments dont l'index est supérieur à l'index spécifié
:lt()
Éléments dont l'index est inférieur à l'index spécifié
:even
Éléments d'index pair
:odd
Éléments d'index impair
:empty
Éléments qui n'ont pas d'enfant
:not()
Éléments qui ne correspondent pas au sélecteur spécifié. Par exemple :
a :not(.selected)
Décembre 2014
1.4. Les actions
Une fois un ensemble d’éléments sélectionné, il est possible soit de gérer les événements liés à ces éléments,
soit d’y effectuer quelques modifications :
Expression JQuery
Description
$("a").addClass ("toto") ;
Ajouter la classe toto aux balises a
$("a").removeClass ("toto") ;
Retirer la classe toto aux balises a
$("a").toggleClass ("toto") ;
Ajoute la classe si elle n’était pas présente, et vice-versa.
$("a").css ("color","#ff0000") ;
Modifie une propriété CSS
$("a").attr ("href","page2.html") ;
Modifie ou crée l’attribut href
$("a").removeAttr ("href") ;
Supprime l’attribut href
$("a").text ("bonjour") ;
Modifie le texte contenu dans les balises
$("a").html ("salut <b>mec</b>") ;
Modifier le contenu par du html
$("a").val ("bonjour") ;
Modifie la valeur d’un input de formulaire
$("a").show () ;
Affiche les éléments
$("a").hide () ;
Cache les éléments
$("a").toggle () ;
Affiche si les éléments sont cachés, et vice-versa.
$("a").slideDown () ;
Affiche les éléments en les déroulant.
$("a").slideUp () ;
Cache les éléments en les enroulant.
$("a").slideToggle () ;
Affiche les éléments en les déroulant si ils sont cachés, et vice-versa.
$("a").fadeIn () ;
Affiche les éléments par progression de la transparence.
$("a").fadeOut () ;
Cache les éléments par progression de la transparence.
$("a").fadeToggle () ;
Affiche les éléments par progression de la transparence si ils sont
cachés et vice-versa.
Il y a d’autres effets, plus ou moins évolués, mais ceux-ci seront suffisants pour NFA074. Certains effets acceptent
des paramètres qui sont détaillés sur le site jquery.com.
Chapitre 4 : Javascript et jQuery
9 / 13
1.5. Les événements
Nous connaissons déjà l’événement ready qui a la particularité de s’appliquer à $(document). La plupart des
autres événements s’appliquent à des éléments issus d’une sélection. Il y a trois types d’événements, ceux
déclenchés par la souris (le clic, le double clic, l’appuie sur le bouton, le déplacement, …), ceux déclenchés par
le clavier (appuie / relâche d’une touche), et ceux liés aux formulaires (validation, modification, focus, …)
1.5.1. Evénements souris
Action
Fonction
Clic
click()
Double-clic
dblclick()
Passage de la souris
hover()
Rentrer dans un élément
mouseenter()
Quitter un élément
mouseleave()
Presser un bouton de la souris
mousedown()
Relâcher un bouton de la souris
mouseup()
Scroller (utiliser la roulette)
scroll()
L’exemple suivant décrit la gestion du clic sur les images de la page :
$("img").click(function(){
});
Comme nous l’avons expliqué précédemment, la sélection des images ne peut se faire qu’une fois la
structure de la page chargée. Ainsi, nous allons placer ce code à l’intérieur du gestionnaire de ready :
$(document).ready(function(){
$("img").click(function(){
});
});
Dans le gestionnaire de clic, il est possible d’afficher un message, comme le ferait l’exemple suivant :
$(document).ready(function(){
$("img").click(function(){
alert("quelqu’un a cliqué sur une image");
});
});
Il est aussi possible de sélectionner des éléments et d’appliquer des effets dessus :
$(document).ready(function(){
$("img").click(function(){
$(".message").show();
});
});
Ou même d’appliquer plusieurs effets en les chainant à l’aide du . (point) :
Décembre 2014
$(document).ready(function(){
$("img").click(function(){
$(".message").text("quelqu’un a cliqué sur une image").show();
});
});
Exercice 2 :
Ecrivez une page contenant une image, et un textarea. En vous appuyant sur l’exemple ci-dessus,
adaptez le contenu du div en fonction du clic sur l’un ou l’autre des deux éléments.
Exercice 3 :
Ecrivez une page contenant deux images. Quand l’utilisateur clique sur une image, celle-ci disparait et
l’autre apparait.
1.5.1.1.
preventDefault
Les événements sont répercutés automatiquement. Par exemple, si vous cliquez sur une case d’un
tableau, les événements suivants sont déclenchés de fils en père :
- Evénement du clic sur la case du tableau (td),
- Evénement du clic sur la ligne du tableau (tr)
- Evénement du clic sur le tableau (table)
- Evénement du clic sur le div qui contient le tableau
- …
- Evénement du clic sur le document
Pour éviter ceci, il convient de bloquer cette répercussion en appliquant la fonction preventDefault() à
l’événement qui est un paramètre de toutes ces fonctions. Voici un petit exemple :
$(document).ready(function(){
$("td").click(function(e){
return e.preventDefault()
});
});
Dans cette exemple, on utiliser le mot-clé return qui permet en outre de modifier le comportement du
clic (ou annulerait le comportement par défaut lors du clic sur un lien par exemple)
1.5.1.2.
this
Dans la fonction de gestion des événements, nous avons la possibilité de considérer directement
l’élément sur lequel l’action a été déclenchée à l’aide de $(this), comme le montre l’exemple suivant,
qui modifie uniquement le style de l’image sur laquelle on a cliqué :
$(document).ready(function(){
$("img").click(function(){
$(this).css("border","3px solid #ff0000");
});
});
Cet exemple est en fait l’exemple 1, présenté au tout début de ce chapitre.
Chapitre 4 : Javascript et jQuery
11 / 13
1.5.2. Evénements clavier
Action
Fonction
une touche du clavier est enfoncée
keydown()
une touche du clavier est maintenue enfoncée
keypress()
une touche du clavier est relâchée
keyup()
Dans le cas des événements clavier, le code de la touche en question est disponible en tant que paramètre de
la fonction définie en ligne.
Exemple :
$("header").keyup(function(touche){
// on affiche une première alertes
alert("Vous venez d'appuyer sur la touche Entrée !");
/* ainsi qu’une seconde
alerte avec le numéro de touche */
alert(touche);
});
L’exemple ci-dessus illustre définition d’une fonction en ligne contenant un paramètre (touche) ainsi que le
fonctionnement des commentaires en javascript. Le double slash (//) pour commenter la suite de la ligne, ou le
commentaire avec début (/*) et fin (*/).
Evénements formulaire
Action
Fonction
Focalisation
focus()
Sélection (p.e. dans une liste)
select()
Changement de valeur
change()
Envoi du formulaire
submit()
Exercice 4 :
Reprenez l’exercice ci-dessus avec un div et un formulaire. Si l’on clique que le div, il disparait et le
formulaire apparait. Lors du clic sur le bouton de validation du formulaire, ce formulaire s’efface et le
div s’affiche.
Décembre 2014
1.6. Exercices
Exercice 5 : Créez un texte qui s'agrandit au clic. Si on reclique dessus, il reprend sa taille d'origine.
Exercice 6 : Créez une page contenant plusieurs paragraphes, lors du clic sur un paragraphe, il se met en
gras.
Exercice 7 : Créez 5 boutons et un rectangle. Chaque bouton provoque une action sur le rectangle :
-
Bouton 1 : règle la hauteur du rectangle à 500px
Bouton 2 : met le rectangle en vert
Bouton 3 : remet les couleurs initiales
Bouton 4 : fait disparaître le rectangle
Bouton 5 : fait réapparaître le rectangle
Exercice 8 : Reprenez l’exemple 1 pour que seule l’image sur laquelle on vient de cliquer soit affublée d’une
bordure.
Exercice 9 : Créer un rollover sur une image en la remplaçant par une autre image.
Exercice 10 : Créer un rollover sur du texte ; lors du passage de la souris, le texte est modifié.
Exercice 11 : Créer un effet sur un texte :
 Il s'affiche en gras en cas de clic
 Il s'affiche en italique en cas de double-clic
Exercice 12 : Créer une page web comportant une phrase, dont un groupe de mots, de couleur noire au
chargement, doit prendre la couleur :
 rouge (#ff0000) au passage de la souris ;
 vert (#009900) en réponse à un click ;
 bleu (#0000ff) en réponse à un double click.
Exercice 13 : Créer une page web constituée d'un court paragraphe (quelques lignes), d'une largeur de 500
pixels. En cliquant sur ce paragraphe, il doit s'afficher grosso-modo au centre de la page, avec un mot par ligne.
Le double click doit permettre de revenir au format initial (aligné à gauche, occupant une largeur de 500 pixels).
Exercice 14: Créer un rollover sur du texte ; lors du passage de la souris, le texte subira les changements
suivants :
 police Verdana ;
 un trait en travers des lettres (line-through) ;
 une multiplication par 2 de la hauteur des lignes ;
 une multiplication par 1,5 de la taille des caractères par rapport à la taille par défaut ;
 une capitalisation des premières lettres des mots.
Exercice 15 : Créer un menu horizontal avec un effet rollover en javascript.
Exercice 16 : Créer un boite dont seule la première ligne s'affiche et mais qui s'agrandit à 300px de haut si l'on
double clic sur le titre.
Exercice 17 : Créer deux boites :
 La seconde ne s'affiche pas.
 La première est le titre, si l'on double clic dessus, la seconde boite s'affiche.
 Lors du clic sur la seconde boite, elle disparait.
Exercice 18 : Créer une pop-in qui s'ouvre lors d'un clic sur un lien.
Chapitre 4 : Javascript et jQuery
13 / 13