Tutoriel Javascript, Université de Nice – Sophia Antipolis

Transcription

Tutoriel Javascript, Université de Nice – Sophia Antipolis
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
TUTORIEL JAVASCRIPT
Javascript est un langage de script (interprété au fur et { mesure, ce n’est pas un programme { part
entière). Il est supporté par les navigateurs web récents. Il peut donc être exécuté lors de la
navigation sur les pages web par la plus part des personnes.
Une grande partie du javascript est comprise par les navigateurs. Cependant, chaque navigateur
propose des fonctionnalités qui leur sont propres, notamment pour la gestion de la souris. Ceci rend
difficile la réalisation de pages web incluant du javascript fonctionnant sur tous les navigateurs,
quelque soit le système d’exploitation.
Il existe heureusement des éléments fonctionnant à peu près partout. Ce sont donc ceux-ci que nous
allons découvrir, petit { petit. Dans l’ordre, nous verrons : le principe sommairement d’un fichier
html, comment insérer un peu de javascript, comment javascript manipule les pages web et
comment réaliser de petite animation en javascript.
Notons que les seuls outils dont vous ayez besoin sont : un navigateur web qui interprète le
javascript et dont l’interprétation est activée (ce qui est le cas par défaut des navigateurs comme
firefox, internet explorer, safari, opéra, google chrome, etc.) et d’un éditeur de texte.
INSERER DU JAVASCRIPT DANS UNE PAGE HTML
MISE EN PLACE DE VOS PAGES WEB
Dans votre répertoire www/ext/technoWeb, créez un répertoire « tutojs ». Récupérez le fichier
premierePage.html et placez-le dans ce répertoire « tutojs ».
Une fois recopiée dans le répertoire, la page est accessible via le web par l’adresse
« http://kheops.unice.fr /~login/ext/technoWeb/tutojs/premierePage.html ».
INSERTION DE JAVASCRIPT
Nous allons voir comment ajouter du javascript dans un page.
Le code javascript peut être écrit dans la page elle-même grâce à la balise « <script
type="text/javascript"> » et « </script> ». Cette balise peut être placée dans l’entête ou dans le
corps de la page. Il peut y avoir autant de ces balises que nous le souhaitons dans une page. Mais
attention, une balise « <script type="text/javascript"> » et « </script> » ne peut pas contenir une
autre balise « <script type="text/javascript"> » et « </script> ».
Pour commencer, nous allons faire apparaître une petite fenêtre (popup) avec du texte. Copiez dans
le presse papier (ctrl+C ou menu édition / copier) le code suivant :
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
<script type="text/javascript">
alert("bonjour et bienvenue sur ma page ! ") ;
</script>
Collez le dans le fichier premierPage.html dans l’entête de la page (entre la balise « <head> » et
« </head> »). Ouvrez votre fichier dans votre navigateur. Qu’observez vous ? Voyez vous le reste du
document avant de cliquez sur « ok » ?
Le code javascript s’exécute au fur et { mesure qu’il est lu dans la page. Déplacez ce morceau de code
dans le corps de la page :
d’abord entre la ligne « <p>ceci marque le d&eacute;but de la page</p> » et la ligne
« <h1>insertion de javascript</h1> » , rechargez votre page, que constatez-vous ?
puis juste avant la ligne « <p>ceci marque la fin de la page</p> », rechargez votre page, que
constatez –vous ?
et finalement juste après la ligne « <p>ceci marque la fin de la page</p> », rechargez votre
page, que constatez –vous ?
La fonction javascript « alert » est l’une des fonctions qu’offre javascript. Nous l’utilisons ici car son
effet est immédiat. Il est bien sûr possible de faire beaucoup plus. Par exemple, nous pouvons faire
des calculs. Nous allons définir une fonction qui calcule la circonférence d’un cercle et l’utiliser avec
différentes valeurs de rayons.
Dans l’entête du fichier premierePage.html, copiez le code suivant :
<script type="text/javascript">
function circonference(rayon)
{
return 2*Math.PI*rayon;
}
</script>
Cette fonction prend un paramètre, rayon, et donne le résultat de la multiplication de ce rayon par
2π. La valeur de π est donnée par la constante (incluse dans javascript) « Math.PI », la multiplication
est simplement notée par le symbole « * ».
Recopier le code suivant n’importe où dans le corps de la page :
<script type="text/javascript">
alert("la circonference d’un cercle de rayon 3m est de "+circonference(3)+ " m") ;
</script>
Le signe « + » sert ici { concaténer deux chaines de caractères. Une chaîne de caractère, c’est du
texte (manipulée par un programme). La concaténation, c’est simplement ajouter du texte { un
autre.
Rechargez votre page est observez le résulat.
Nous allons maintenant appeler cette fonction grâce à une variable, « x ». Si vous ne savez pas ce
qu’est une variable, souvenez-vous des représentations graphiques des fonctions que vous avez pu
faire au lycée. En abscisse, vous aviez traditionnellement x qui variait et en ordonnée y qui était le
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
résultat de la fonction. Dans un tel cas, x est une variable, car nous faisions changer sa valeur entre
une valeur de début et une de fin. x pouvait alors prendre n’importe quelle valeur entre ses deux
bornes. Ici, nous allons faire varier x entre 0 et 5, en augmenter x de 1 à chaque fois. Recopier le
code suivant dans le corps de la page premierePage.html :
<script type="text/javascript">
x = 0;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
x = 1;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
x = 2;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
x = 3;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
x = 4;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
x = 5;
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
</script>
Rechargez la page et observez le résultat.
En fait, les langages de programmation, javascript inclus, permettent de faire évoluer les valeurs et
enchainer les valeurs plus facilement que de recopier plusieurs fois la même ligne de code qui varie
peu. Le code suivant est équivalent au code précédent :
<script type="text/javascript">
for(x = 0; x <= 5; x = x+1)
{
alert("la circonference d'un cercle de rayon "+x+"m est de "+circonference(x)+ "m") ;
}
</script>
Traduit en français, ces instructions javascript donne : « pour (« for ») chaque x allant de 0 à 5
(inclus, car « <= » signifie inférieur ou égale), x prenant (signe « = ») l’ancienne valeur de x plus 1 ;
on affiche (« alert ») le calcule de la circonférence du cercle de rayon x ». Ceci s’appelle une boucle
« for ».
Remplacez le dernier code que vous avez inclus et remplacez le par son équivalent avec la boucle
« for ». Rechargez la page et observez le résultat. Modifiez la partie « x = x + 1 » par « x = x +0.5 » et
obervez le résultat. C’est plutôt pratique, non ?
Nous avons vu comment mettre du javascript dans la page web. Cependant, à chaque fois, nous
avons utilisé une fenêtre autre que la page. Maintenant, nous allons voir comment insérer le
javascript dans la page elle-même.
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
JAVASCRIPT ET LA PAGE WEB
DOCUMENT.WRITE : ECRITURE DE MORCEAU DE HTML EN JAVASCRIPT
Il est possible d’écrire du html via javascript. A quoi cela sert-il ? A gérer du contenu qu’il est
impossible de mettre à jour continuellement, comme la date et l’heure ou { générer du contenu qu’il
serait pénible (copier coller répétitif) à écrire en html.
Récupérez la page deuxiemePage.html, placez la dans votre répertoire « tutojs ». Pour commencer,
ajoutons la date et l’heure entre les balises fermantes « </h1> » et « </body> » :
<script type="text/javascript">
time = new Date();
document.write("<p>Nous sommes le "+time.getDate()+" / "+(time.getMonth()+1)+"</p>");
document.write("<p>Il est "+time.getHours()+" : "+time.getMinutes()+"</p>");
</script>
La variable « time » reçoit le résutat d’une fonction incluse dans javascript, « new Date( ) ». Ceci
permet de créer un objet informatique contenant la date et l’heure. Pour récupérer les valeurs de cet
objet, il faut lui demander. Par exemple, pour avoir les heures, nous lui demandons à travers une
fonction « getHours( ) » qu’il nous fournit . Comme souvent en informatique, les objets parlent
anglais et il nous faut leurs parler en anglais.
Rechargez la page et observez le résultat. Attendez une minute, par exemple en lisant ces quelques
phrases et à nouveau, rechargez la page et observez le résultat.
Ainsi, la date et l’heure s’affichent sans que nous ayons { modifier le document. En fait, le document
est un objet informatique fourni par javascript, qui nous permet de manipuler le document, c’est-àdire la page web. Le document est aussi anglophone, aussi, lorsque nous voulons ajouter, écrire une
phrase dans le document, nous lui demandons par la fonction « document.write( ) » en passant en
paramètre ce que nous voulons écrire. Ceci marche très bien au chargement de la page (quand on
ouvre la page ou quand on actualise la page).
Revenons à nos circonférences de cercles. Affichez ceci dans une fenêtre « popup » était assez
pénible, car d’une part, il fallait cliquer plusieurs fois sur ok et d’autre part le résultat n’était plus
accessible une fois la page chargée. Avec « document.write » , nous allons pouvoir ajouter les
résultats dans la page. Pour cela, recopiez le code javascript suivant dans l’entête (entre les balises
« <head> » et « </head> » :
<script type="text/javascript">
function circonference2(rayon)
{
circ = 2*Math.PI*rayon;
document.write("<p>La circonference du cercle de rayon "+rayon+"m est de
"+circ+"m.</p>");
return;
}
</script>
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
Et recopiez le code suivant dans le corps de la page, entre « <body> » et « « <h1> » :
<script type="text/javascript">
for(x = 0; x <= 5; x = x+0.5)
{
circonference2(x);
}
</script>
La fonction « circonference2 » est une variante de la fonction précédente. Elle calcule la
circonférence, mais au lieu de retourner le résultat, elle écrit un paragraphe dans le document. De
fait, elle ne retourne aucune valeur. Ensuite, nous appelons cette fonction plusieurs fois, grâce à
l’instruction « pour (for) x variant… ».
Rechargez votre page deuxiemePage.html et observez le résultat.
Nous venons de le voir, « document.write » permet d’insérer dans la page, lors de son chargement,
des éléments calculés. Cependant, cela ne permet pas une interaction plus conviviale une fois la
page chargée. C’est pourquoi nous allons utiliser la notion d’événement.
JAVASCRIPT ET LES EVENEMENTS UTILISATEURS
Qu’est-ce qu’est un événement ? C’est une action réalisée par l’utilisateur, la personne qui consulte
la page web. Par exemple, nous pouvons vouloir déclencher une action, comme effectuer un calcul
lorsque l’utilisateur clique sur un bouton.
Récupérer la page troisiemePage.html et placez là dans votre répertoire « tutojs ». Dans cette page, il
y a un champ texte dans lequel on peut taper grâce au clavier du texte, en particulier un rayon. Il y a
aussi un bouton qui servira de déclencheur au calcul.
Pour commencer, nous allons récupérer la valeur qui sera entrée dans le champ texte. Copiez le
code javascript suivant dans l’entête de la page (entre les balises « <head> » et « </head> ») :
<script type="text/javascript">
function afficheChampDeTexte( )
{
champs = document.getElementById("rayon");
alert("la valeur entree est : "+champs.value);
return;
}
</script>
Pour récupérer la valeur entrée dans le champ texte, nous utilisons une fonction que l’objet
document nous fournit « document.getElementById ». « id » est un attribut de chaque balise html
qui permet de nommer une des balises de la page. Cet « id » doit être unique, de fait, il ne reste plus
qu’{ demander au document quelle balise est nommée de telle ou telle façon pour l’obtenir.
La fonction « afficheChampDeTexte » récupère donc la valeur entrée puis l’affiche dans une fenêtre
« popup ».
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
Il ne reste plus qu’{ déclencher l’utilisation de cette fonction. Pour cela, nous allons utiliser un
attribut particulier des balises html :
« onclick » qui permet de déclencher une action lorsque l’utilisateur clique « sur » la balise
(le texte contenu dans la balise)
« onmouseover » qui permet de déclencher une action lorsque l’utilisateur fait passer la
souris au dessus du texte contenu dans la balise
« onmouseout » qui permet de déclencher une action lorsque l’utilisateur enlève la souris
d’au dessus du texte contenu dans la balise.
Par exemple, nous allons ajouter ce code « html/javascript » onclick="afficheChampDeTexte();"
dans la balise « <input type="button" ». Rechargez votre page troisiemePage.html. Cliquez sur le
bouton. Observez. Puis entrez un nombre dans le champ en haut de la page et recliquez sur le
bouton. Finalement, tapez votre prénom dans le champ en haut de la page et recliquez sur le bouton.
Nous le voyons, que nous ayons tapé du texte ou non, que nous ayons tapé un nombre ou non, nous
récupérons la valeur (vide ou non) de manière identique. Heureusement, javascript nous fournit
une fonction « isNaN( ) (is Not a Number) » qui permet de savoir si son paramètre n’est pas un
nombre ou si c’est un nombre.
Or, comme chaque langage de programmation impératif, javascript propose des structures de
contrôle. Il s’agit en fait de faire des aiguillages ou des re-bouclages. L’instruction « for » en est une.
L’instruction « if (condition) { } else { } » permet de faire un aiguillage. Par exemple, le matin, il m’est
possible de consulter la météo. Et si la pluie est annoncée, alors je prends mon parapluie. Sinon, si la
pluie n’est pas annoncée, alors je ne prends pas mon parapluie. Ce qui donnerait en mélangeant le
français et la structure javascript : « if (la pluie est annoncée) { je prends mon parapluie } else { je ne
prends pas mon parapluie } ».
Ainsi, nous pouvons tester si la valeur entrée dans le champ texte est un nombre ou non. Effacez
tout le code javascript que vous insérer dans l’entête de la page troisiemePage.html. Remplacez le
par le code suivant :
<script type="text/javascript">
function afficheChampDeTexte( )
{
champs = document.getElementById("rayon");
if (isNaN(champs.value))
{
alert("vous n'avez pas entre un nombre, je ne peux pas calculer la circonference !");
}
else
{
circonference = 2*Math.PI*champs.value ;
alert("la circonference est : "+circonference+" m");
}
return;
}
</script>
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
Rechargez votre page troisiemePage.html. Cliquez sur le bouton. Observez. Puis entrez un nombre
dans le champ en haut de la page et recliquez sur le bouton. Finalement, tapez votre prénom dans le
champ en haut de la page et recliquez sur le bouton.
Cette fois, il n’y a que lorsqu’on ne tape rien dans le champ texte, c’est-à-dire un texte vide soit « "" »
en javascript, que l’on calcule pour rien. Comme il est possible de mettre des structures de contrôle
(« for », « if », etc.) dans des structures de contrôle, la solution consiste à utiliser un autre test avec
l’instruction « if ». Remplacez la fonction « afficheChampTexte » par cette nouvelle version (sur la
page suivante) :
<script type="text/javascript">
function afficheChampDeTexte( )
{
champs = document.getElementById("rayon");
if (isNaN(champs.value))
{
alert("vous n'avez pas tape un nombre, je ne peux pas calculer la circonference !");
}
else
{
if (champs.value != "")
{
circonference = 2*Math.PI*champs.value;
alert("la circonference du cercle de rayon "+champs.value+" m est de
"+circonference+" m");
}
else
{
alert("vous n'avez rien tape, je ne peux pas calculer la circonference !");
}
}
return;
}
</script>
Rechargez votre page troisiemePage.html. Cliquez sur le bouton. Observez. Puis entrez un nombre
dans le champ en haut de la page et recliquez sur le bouton. Finalement, tapez votre prénom dans le
champ en haut de la page et recliquez sur le bouton.
Comme précédemment, affichez le résultat, c’est déj{ pas mal. Mais le résultat n’est plus
consultable… alors nous pourrions vouloir utiliser « document.write ». Seulement, cette fonction
offerte par javascript (à travers l’objet document) ne fonctionne « convenablement » qu’au
chargement de la page. Essayez par vous-même en remplaçant « alert » par « document.write ».
Rechargez votre page et essayez… tout disparait sauf le résultat et on ne peut plus recalculer ou voir
ce qu’il y avait préalablement.
Pour ajouter le résultat dans la page, il va falloir utiliser l’attribut des objets informatiques
(javascript) innerHTML, ce que nous voyons dans la section suivante.
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
MODIFIER LA PAGE : L’ATTRIBUT INNERHTML
En effet, la propriété innerHTML des objets javascript représentant les balises html permet de
manipuler le code html incluse dans ces balises.
Téléchargez la page quatriemePage.html et obervez là dans votre navigateur ainsi que son code
source. Vous y voyez une ligne, sur fond orange et encadrée de rouge, c’est un paragraphe (balise
« <p class="miseEnValeur"> » et « </p> ») qui est mis en forme avec du CSS. Nous allons essayer
cette propriété innerHTML sur ce paragraphe. Dans cette balise paragraphe, ajoutez l’appel { une
fonction javascript : onclick="montreHtml(this);" , c'est-à-dire après le « <p class="miseEnValeur" »
et avant le « > », en laissant des espaces pour séparer les attributs. Le mot « this », ceci, permet de
passer en paramètre le paragraphe lui-même, lorsqu’on clique dessus car avec l’attribut « onclick »
qu’on déclenche l’appel.
De plus rajoutez le code correspondant à la fonction « montreHtml » dans l’entête de la page :
<script type="text/javascript">
function montreHtml(balise)
{
alert("le code html inclus dans la balise "+balise.tagName+" est
<<"+balise.innerHTML+">>");
}
</script>
L’attribut « balise.tagName » permet de connaitre la balise html représenté par l’objet javascript.
Rechargez votre page et cliquez sur le paragraphe sur fond orange. Modifiez le texte de ce
paragraphe. Par exemple, ajoutez la phrase « Toutes les informations sur html sont sur la page <a
href="www.w3.org">w3c</a>». Rechargez et recliquez. Observez les évolutions.
Cette fonction peut fonctionner avec n’importe quelle balise. Ajoutez onclick="montreHtml(this);"
sur la première balise paragraphe du corps de la page, c'est-à-dire après le « <p » et avant le « > » en
laissant un espace entre le « p » et le « onclick » . Rechargez et cliquez sur la première ligne de la
page.
Vous l’avez constaté, « innerHTML » permet d’avoir accès au code html inclus dans la balise. Il s’agit
en fait d’une chaine de caractère. Et il est possible aussi de modifier ce code html. Par exemple, dans
la fonction « montreHTML », ajoutez la ligne suivante :
balise.innerHTML = balise.innerHTML + " on a vu le code html " ;
Notez que nous utilisons ici la concaténation, c’est-à-dire l’ajout d’un texte { la suite d’un autre. Ainsi
le code html présent avant le clic est conservé. Essayez à nouveau votre page et cliquez sur les
différentes lignes de la page. Modifiez la ligne ci-dessus, par exemple en inversant de part et d’autre
du « + » les chaines de caractères « balise.innerHTML » et « " on a vu le code html " ». Observez le
résultat dans votre navigateur.
Pour la suite, il est plus pratique de retire le « onclick » sur le premier paragraphe de la page.
Pour en revenir à nos circonférences, au lieu de faire une fenêtre pour afficher le résultat avec la
fonction « alert » nous allons ajouter le résultat dans un paragraphe prévu à cet effet. Dans la page
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
web, il y a à la fin de la page, un paragraphe nommé (id) « resultats ». Nous allons adapter la
fonction « afficheChampDeTexte » (et en profiter pour lui changer de nom) avec notre nouvel outil
« innerHTML ». Dans l’entête de la page quatriemePage.html, ajoutez ceci :
<script type="text/javascript">
function afficheCirconference( )
{
endroitOuEcrire = document.getElementById("resultats");
champs = document.getElementById("rayon");
if (isNaN(champs.value))
{
endroitOuEcrire.innerHTML = endroitOuEcrire.innerHTML + "vous n'avez pas tape
un nombre, je ne peux pas calculer la circonference !<br />";
}
else
{
if (champs.value != "")
{
circonference = 2*Math.PI*champs.value
endroitOuEcrire.innerHTML = endroitOuEcrire.innerHTML + "la
circonference du cercle de rayon "+champs.value+" m est de "+circonference+" m.<br />";
}
else
{
endroitOuEcrire.innerHTML = endroitOuEcrire.innerHTML + "vous n'avez
rien tape, je ne peux pas calculer la circonference !<br />";
}
}
return;
}
</script>
Rechargez la page. Le calcul ne se fait pas ? n’avez-vous rien oublié ? par exemple le déclenchement
du calcul quand on clique sur le bouton ? (le code « onclick="afficheCirconference( );" »).
Modifiez le code de la fonction « afficheCirconference » pour ne pas avoir de message d’erreur
(quand on n’a pas tapé un nombre) dans la page. Par exemple en utilisant la fonction « alert » au lieu
de modifier le code html…
Voil{, nous avons obtenu une page dont le contenu évolue en fonction des actions de l’utilisateur.
Vous venez de manipuler dynamiquement une page web.
Cependant, avec javascript, il est possible de faire bien plus…
Tutoriel Javascript, Université de Nice – Sophia Antipolis
2008
POUR ALLER PLUS LOIN : UNE HORLOGE
Dans cette partie, en guise d’exercice, nous allons faire une petite animation à travers un texte qui va
se mettre à jour dans la page toutes les secondes. Notre objectif est de réaliser une petite horloge en
texte.
MODIFIER L’HEURE APRES UN CLIC SUR UN BOUTON
Dans un premier temps, nous allons simplement mettre { jour l’heure quand on clique sur le bouton
en « bas » de la page web cinquiemePage.html que vous allez récupérez et placer dans votre dossier
« tutojs ».
Complétez le code javascript de la fonction « rafraichirHorloge » pour que l’heure soit rafraichie
dans la page lorsque vous cliquez sur le bouton. Pour cela, inspirez-vous de la façon dont est écrite
l’heure au chargement de la page (c.f. « document.write »), récupérez le paragraphe nommé
"horloge" (c.f. « document.getElementById ») et utilisez l’attribut « innerHTML ».
MODIFIER L’HEURE AUTOMATIQUEMENT
Avant de pouvoir réaliser une mise { jour automatique de l’heure, nous avons besoin de connaitre
deux fonctionnalités de javascript (voire de html) supplémentaires :
D’une part, il existe un déclencheur automatique { la fin du chargement de la page web dans
le navigateur. Il s’agit de l’attribut « onload » de la balise « <body> » et « </body> » et
uniquement pour cette balise. Cet attribut « onload » fonctionne comme « onclick », sauf que
son déclenchement n’est pas un clic souris, mais comme écrit précédemment, le chargement
de la page web.
D’autre part, la fonction « setTimeout » permet de différer l’exécution d’un code javascript.
Par exemple « setTimeout("alert(‘coucou’)", 1000) ; » permettra d’ouvrir une fenêtre
contenant le message « coucou » au bout d’une seconde (1000 est exprimé en milisecondes).
Par exemple « setTimeout("rafraichirHorloge( )", 1000) ; » permet d’appeler la fonction
« rafraichirHorloge » au bout d’une seconde.
Une fonction peut se rappeler elle-même de la sorte.
Modifiez donc la balise ouvrante « <body> » et la fonction « rafraichirHorloge » pour que la mise à
jour soit automatique.
Vous y êtes arrivé ? très bien. Vous êtes arrivé { la fin de ce tutoriel. Sachez qu’il existe encore
beaucoup de facette de javascript, notamment tout ce qui est lié au document object model, à xml et
{ l’ajax.
Mais avant de vous laissez tranquille, que se passe-t-il maintenant si vous cliquez sur le bouton ?
Qu’en concluez-vous ?

Documents pareils