Introduction à JavaScript et 3.js
Introduction à JavaScript et 3.js
Partie 3 : JavaScript
2
Plan de la présentation
Introduction à JavaScript
Core JavaScript
Client-side JavaScript
3
Introduction
Interagir
Manipuler les avec les
événements éléments Valider les formulaires
HTML web côté client
Introduction
4
Introduction Introduction
Des jeux exploitants la balise <canvas> : Un lecteur de vidéos ou de musiques grâce aux
Torus; Tetris en 3D ; modélisation 3D d’une balises <video> et <audio>
Lamborghini affichée grâce à l'API WebGL et à la
bibliothèque [Link] 5
Introduction à JavaScript Introduction à JavaScript
6
Introduction à JavaScript Un peu d’histoire…
pages WEB.
Exécuté sur vos machine donc côté Client.
L’un des langages WEB les plus utiles et membre du
fameux triplet :
HTML pour le contenu
CSS pour la présentation
JS pour le comportement
JavaScript est:
Haut niveau
Dynamique
Non typé
Interprété
Compilé vs Interprété
Compilation
Introduction à JavaScript
Interprétation
Introduction à JavaScript
Operateurs et Expressions
Structures conditionnelles et itératives
Les Fonctions
Les Tableaux
Les Objets
La structure lexicale de JavaScript
Identifiants
Doit commencer par une lettre, par (_) ou par le signe dollar ($)
Le reste des lettres, chiffres, (_), ou $
Core JavaScript
Certains sont moins utilisés mais peuvent l’être plus dans les futurs
versions
class const enum export extends import super
Dates et Times
(ne marche pas dans les internet explorer <10). Cette fonction
retourne un id qui identifie la fonction pour pouvoir l’annuler avec la
fonction clearTimout.
setInterval( execFunction, intervalTime, param1,param2,…,paramN)
est une fonction qui permet d’exécuter la fonction execFunction tout
les intervalTime milliseconde à partir de son appel. Les paramètres
param1, paramN sont les paramètres que nous voulons passer à
execFunction (ne marche pas dans les internet explorer <10).
Si La version est inférieur à explorer 10 il suffit d’utiliser une fonction
anonyme et dans laquelle on appellera la fonction execFunction. Cette
fonction retourne un id qui identifie la fonction pour pouvoir l’annuler
avec la fonction clearInterval.
Dates et Times
function testTimout() {
setTimeout(function () {
[Link]('Je test le Timout');
},2000);
}
Core JavaScript
testTimout();var i=0;
testInterval();
function testInterval() {
var code =setInterval(function () {
if(i<22)
{
[Link](i);
i++
}
else{
clearInterval(code);
}
},100,code);
}
Chaines
valeur undefined.
script JS.
Variables locales
Déclarées dans le corps d’une fonction
Définit dans une fonction ou dans n’importe quelle fonction
définie à l’intérieur de celle-ci.
Vous devez toujours utiliser var pour les variables locales
JS n’a pas de portée de block.
La portée des variables
script JS.
Variables locales
Déclarées dans le corps d’une fonction
Définit dans une fonction ou dans n’importe quelle fonction
functiondéfinie
test(o) { à l’intérieur de celle-ci.
var i = 0; // i est défini dans la fonction
Vous
var jdevez toujours utiliser var pour
if (typeof o == "object") {
= 0; lesdéfini
// j est variables
dans la locales
for (var k=0; k < 10; k++) { // k est défini dans la fonction pas
JS n’a pas de [Link](k);
portée de block. //que dans la boucle
// Afficher les nombres de 0 à 9
}
[Link](k); // k est toujours défini
}
[Link](j); // j est toujours défini mais elle peut ne pas être initialisé
}
La portée des variables
monArray =[ ];
monArray =[1+2,3+4]; // 3, 7
var matrice = [[1,2,3], [4,5,6], [7,8,9]];
var eparseArray = [1,,,,5]; // eparseArray[1]==undefined;
var t = new Array(1,2,3) var t=[1,2,3]
Les tableaux
NAN)
function comparerDesNombres(a, b) {
return a - b;
}
function comparerDesNombres(a,b){
var x=parseInt(a,10);var y=parseInt(b,10);
if(x>y){
return 1;
}else if(y>x){
return -1;
}return 0;
}
var t=[1,2,3,11,22,33];
[Link](comparerDesNombres);
Les objets : Valeurs primitives vs Objets
Primitives:
undefined, null, boolean, numériques, et strings
Immutable : leur allocation de mémoire initiale ne
Core JavaScript
change jamais
Sont comparées par valeur
Objets :
Tout le reste: objets, tableaux et fonctions
Mutable: leur mémoire peut changer dynamiquement
Sont comparés par référence
Les objets
Un objet est une valeur composite
C’est une collection de propriétés désordonnée, chacune
avec un nom et une valeur et qui peuvent être:
Des Attributs
Core JavaScript
Des Méthodes
Les propriétés peuvent être ajoutés dynamiquement
Trois types d’objets :
Objet Native: défini par la spécification ECMAScript (Arrays,
fonctions, dates)
Objet Hôte: défini par l’environnement hôte (e.g. navigateur)
dans lequel l’interpréteur est embarqué, i.e. HTMLElement dans
le JS coté client.
Object défini par l’utilisateur : objet crée par l’exécution du
code JS.
Le modèle objet JS : Les prototypes
Un langage basée sur les prototypes ne possède (généralement) que
des objets.
Parmi ces objets il peut y avoir des objets prototypes agissant
comme un modèle permettant ainsi s’avoir des propriétés et des
Core JavaScript
classes et instances sont deux entités distinctes. Tous les objets sont des instances.
Une classe est définie avec une définition de On définit et on crée un ensemble d’objets
classe. On instancie une classe avec des avec des fonctions qui sont des
Core JavaScript
si : }
surname: "Flanagan"
Il inclut un espace };
C’est un mot réservé // Avec l’opérateur new
var o = new Object();
Avec l’opérateur new var a = new Array();
var d = new Date();
new doit être suivi du var r = new RegExp("js");
constructeur // Avec [Link]()
Avec [Link]() var o1 = [Link]({x:1, y:2});
var o2 = [Link](null);
Crée un nouvel objet en var o3 = [Link]([Link]);
utilisant le premier argument var o4 = [Link](o1);
//Exemple constructeur
comme prototype de l’objet function Personne(nom,prenom){
[Link]=nom;
[Link]=prenom;
[Link] =function() {
[Link]([Link]+[Link]);
}
}
Les objets : Création
Ajout et modification des
propriétés // Ajout et modification des propriétés
var author = [Link];
Avec ‘.’ ou ‘[ ]’ var name = [Link];
var title = book["main title"];
Sérialisation d’Object
C’est le processus de transformation d’un objet en une
chaine de caractère et qui peut être récupérée
Core JavaScript
ultérieurement.
2 fonctions :
[Link](objet) : retourne une chaine
[Link](objet) : restore l’objet partir de la chaine JSON
o = {x:1, y:{z:[false,null,""]}};
s = [Link](o); // s : '{"x":1,"y":{"z":[false,null,""]}}'
p = [Link](s); // p est une copie de o
Les Fonctions
C’est un objet « spécial »
Vous pouvez lui ajouter des propriétés et invoquer des méthodes.
C’est un bloc JS défini une fois mais qui peut être exécuté à volonté.
Paramétrable :
Core JavaScript
// return 8 // return 3
/************************************/ /************************************/
Afin d’intégrer votre code JS avec votre page HTML, deux méthodes peuvent être
appliquées :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
[Link]('Bonjour je suis un
script non portable je ne sert qu\'ici
:(');
</script>
</head>
<body>
</body>
</html>
</head>
<body> [Link]('Bonjour je suis un script
<script src=‘[Link]’></script> libre liiiiiiiiibre vous avez besoin de
</body> moi il suffit de m’appeler :D');
</html>
[Link] [Link]
50
Le DOM
Le Document Object Model (DOM) représente une API pour les documents
HTML et XML permettant leur manipulation.
L’objet document est un sous-objet de window c’est son fils. Il représente la page
Web et permet de pointer ou d’accéder à la balise HTMl.
51
Le DOM
html est le parent direct
title est l'unique enfant de head et de body, ses
de head deux enfants
<html>
Client Side
<head>
<title>Titre du document</title>
</head>
<body>
<h1>Titre</h1>
<p>Un peu de texte</p>
</body>
</html>
h1 est le premier
enfant de body
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
Client Side
<body>
<div>
<p>Un peu de texte
<a>et un lien</a>
</p>
</div>
</body>
</html>
53
Les différents types des objets du DOM
Node : C’est le type le plus générique, tous les éléments du DOM sont des Nodes.
54
Quelques fonctions de Window
55
Héritage dans le DOM
Tous les éléments du DOM sont des objets ce qui implique qu’ils contiennent
tous leurs propres méthodes et des attributs.
Ils existent des méthodes et attributs communs à l’ensemble des objets. Ceci est
dû au fait que l’ensemble des éléments sont tous du même type : les nœuds
(Node).
L’aspect d’héritage entre les différents types d’éléments permet d’avoir les
éléments en commun.
Client Side
Node
Element
HTMLElement
HTMLDivElement
56
Manipulation des éléments
Pour accéder aux éléments HTML en utilisant le DOM, l’objet document offre
plusieurs méthodes :
</div>
<div class="Pub"> [Link]('ce que me donne querySelector
<span>Pub 1</span> : '+ [Link]);
<span>Pub 2</span> [Link]('Ce que donne le
</div> querySelectorAll : ');
</div> for(var
<div id="content"> i=0;i<[Link];i++){
<span>Ici je vais mettre mon
contenu</span> [Link](queryselectorAll[i].textConten
</div> t);
Un formulaire bizar pour tester }
getElementsByName() :
<form name="monNom"> [Link]
<input type="password" name="monNom">
<input>
<button name="monNom"></button>
</form>
<script src="[Link]"></script>
</body>
</html>
[Link] 60
Client Side Manipulation des éléments : Exemple
61
Manipulation des éléments
Pour accéder à la liste des classes CSS définies dans l'attribut class d'un élément
nous utilisons className qui retourne la liste des classes associées à l’élément
en question dans une chaine de caractère ou les classes sont séparées par des
Client Side
espaces.
62
Manipulation des éléments
Afin de lire, de créer ou de modifier un attribut d’un « Element » du DOM,
l’objet Element met votre disposition deux méthodes
getAttribute() qui comme son nom l’indique permet de récupérer la valeur
d’un attribut.
setAttribute() qui permet de la modifier
Exemple :
Client Side
63
Client Side Manipulation des éléments
64
Console
Manipulation des éléments
La deuxième méthode mais qui n’est pas appliquée sur la totalité des
navigateurs est d’accéder directement en utilisant le nom de l’attribut
Dans notre exemple le getAttribut(«href») est remplacé [Link]. Le
setAttribut est lui remplacé par [Link]="[Link]"
Client Side
var lautreLien=[Link]("lautrelien");
alert([Link]);
[Link]="[Link]"
[Link]
65
Manipulation le texte des balises
innerHTML : permet de récupérer du code html enfant d’une balise.
textContent (dans sa version standard et innerText qui n’est pas supporté par
tous les navigateurs) permet de faire le même travail que innerHTML sauf qu’elle
Client Side
console
67
Quelques méthodes utiles
Il existe quelques méthodes très utiles qui renseigne sur les éléments du DOM
8 commentaire
68
Se déplacer dans le DOM
nextSibling permet d’accéder au nœud suivant donc au frère suivant d’un nœud
69
Se déplacer dans le DOM
<!doctype html> var nod=[Link]("para");
<html> [Link]("Bonjour je suis le noeud
<head> "+[Link]) ;
<meta charset="utf-8" /> [Link]("Pour visualiser la différence
<title>Ma page de Test </title> entre firstChild et firstElementChild ");
</head> [Link]("bonjour je suis le first child
<body> : "+[Link]);
[Link]("bonjour je suis le first
<p id="para">vous allez trouvez mon Cv <a Elementchild : "+[Link]);
Client Side
id="lelien" href="[Link]">ici</a>.
Veuillez le consulter et appeler moi au
<i>222222</i> pour plus de détails</p> [Link]
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
console
[Link] 70
Se déplacer dans le DOM
Plusieurs propriétés sont offertes permettant le déplacement dans le DOM.
Ces propriétés permettent à partir d’un nœud d’accéder à son père, ou à ses
enfants.
firstChild permet, comme son nom l’indique, à partir d’un élément, d’accéder au
premier enfant d’un noeud.
lastChild permet, comme son nom l’indique, à partir d’un élément, d’accéder au
dernier enfant d’un noeud.
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
[Link] console 72
Mise à jour du DOM : Ajout d’un élément
Afin d’ajouter un nœud dans le DOM il faut généralement suivre les étapes
suivantes :
Récupérer ou créer l’élément à ajouter. Pour le créer, on utilise la méthode de
l’objet document createElement() qui prend en paramètre une chaine
contenant le nom de l’élément à créer.
Décorer l’élément avec les attributs nécessaires en utilisant l’une des deux
Client Side
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
[Link] 74
console
Mise à jour du DOM : Cloner un élément
[Link](falseClonedNode);
<i>222222</i> pour plus de détails</p>
[Link]
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
[Link] 76
Mise à jour du DOM : exemple clone
var nod=[Link]("para");
<!doctype html> var newNode=[Link]("img");
<html> [Link]="asimg";
<head> [Link]="[Link]";
<meta charset="utf-8" /> [Link]="Je suis l'image de aymen";
<title>Ma page de Test </title> [Link]="50";
</head> [Link]="50";
<body> [Link](newNode);
var trueClonedNode = [Link](true);
<p id="para">vous allez trouvez mon Cv <a var falseClonedNode = [Link](false);
id="lelien" href="[Link]">ici</a>. [Link](trueClonedNode);
Veuillez le consulter et appeler moi au
Client Side
[Link](falseClonedNode);
<i>222222</i> pour plus de détails</p>
[Link]
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
[Link] 77
console
Mise à jour du DOM : Supprimer un élément
Comment faire pour supprimer le premier span d’un menu d’un div d’id item ?
Mise à jour du DOM : exemple remove
<!doctype html> var nod=[Link]("item");
<html> [Link]([Link]);
<head>
<meta charset="utf-8" /> [Link]
<title>Ma page de Test
</title>
</head>
<body>
href="[Link]">ici</a>. Veuillez le
consulter et appeler moi au
<i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]"> console
</script>
</body>
</html> [Link] 79
Mise à jour du DOM : remplacer un élément
Afin de remplacer un nœud dans le DOM par un autre il suffit d’appeler la méthode
replaceChild() partir du nœud pére.
<head>
<meta charset="utf-8" />
<title>Ma page de Test </title>
</head>
<body>
<p id="para">vous allez trouvez mon Cv <a id="lelien" href="[Link]">ici</a>. Veuillez le consulter
et appeler moi au <i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
Mise à jour du DOM : exemple replace
<!doctype html> var nod=[Link]("item");
<html> var
<head> newnod=[Link]("Pub")[0].cloneN
<meta charset="utf-8" /> ode(true);
<title>Ma page de Test [Link](newnod,[Link]);
</title>
</head> [Link]
<body>
href="[Link]">ici</a>. Veuillez le
consulter et appeler moi au
<i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body> console
</html> [Link] 81
Manipulation du CSS
JavaScript permet aussi de manipuler et de gérer l’apparence des éléments HTML.
La base de la manipulation des CSS par JavaScript est l’aspect CASCADE qui indique
Client Side
que les règles de styles qui sont appliquées à un élément du document HTML
peuvent venir d’une cascade de différentes sources dont la plus prioritaire est
l’attribut style d’un élément HTML individuel.
Style étant la propriété la plus prioritaire, c’est elle qui sera la plus utilisée.
Manipulation du CSS : La propriété style
Pour accéder à la propriété style :
[Link]
Pour ajouter ou modifier une des propriétés de style
[Link]été
var nod=[Link]("item");
…Exemple : [Link]="blue";
<div id="monMenu">
<div id="item"> [Link]
Client Side
<span>
menu 1
</span>
<span>
menu 2
</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="[Link]">
</script>
</body>
</html>
[Link]
Pour afficher une propriété ?
Manipulation du CSS : getComputedStyle
Pour accéder à une des propriétés des feuilles de styles il faut utiliser la méthode
getComputedStyle()
Client Side
Cette méthode récupère les style CSS associés à un Element HTML qu’elle soient
dans l’attribut style, dans un bloc style ou dans une feuille de style.
La valeur de retour est un objet contenant l’ensemble des styles, donc pour accéder
à un style en particulier il faut utiliser le nom de cette propriété.
Manipulation du CSS : getComputedStyle
<!doctype html> var nod=[Link]("item");
<html> [Link]("je suis l'objet "+ [Link] + "voila
<head>
mes attributs : ");
<meta charset="utf-8" />
<title>Ma page de Test </title> var mesStyles=getComputedStyle(nod);
<link href="css/[Link]" [Link]("ma taille est : "+[Link]+" et "+
rel="stylesheet" type="text/css"> [Link]);
</head> [Link]("La couleur de mon arrière plan est :
<body>
"+[Link]+" et la couleur de
<p id="para">vous allez trouvez mon Cv
<a id="lelien" l'écriture est "+ [Link]);
href="[Link]">ici</a>. Veuillez le for(myStyle in mesStyles){
consulter et appeler moi au [Link](myStyle);
Client Side
87
Gestion des événements
Lors de l’activation du lien, un <html>
<body>
événement click va être crée. <p>
<a href="[Link]
L’événement entame sa L’ Evenement
</a> de l’année
propagation (phase de capture)
</p>
du document vers le nœud qui </body>
précède la cible qui est ici le </html>
Client Side
nœud a.
Document
L’événement atteint sa cible (le
nœud a) <html>
L’Evenement De l’année 88
Gestion des événements
Liste non exhaustive des événements les plus utilisées :
click : un clic du bouton gauche de la souris sur une cible
dblclick : undouble clic du bouton gauche de la souris sur une cible
mouseover : passage du pointeur de la souris sur une cible
mouseout : sortie du pointeur de la souris d’une cible
Client Side
En utilisant le DOM
En utilisant l’ancienne méthode (DOM-0), ceci est fait en affectant à l’attribut
onevent de l’élément à traiter la fonction à exécuter.
90
Gestion des évènements : DOM-0
… var nod=[Link]("item");
<div id="monMenu"> [Link]=function (){
[Link]('Bonjour je suis l\'objet'+ [Link]+'et mon
contenu est : '+[Link]);
<div id="item"> };
<span>menu 1</span> [Link]=function(){
<span>menu 2</span> [Link]('Tu viens d\'accéder à l\'élément '+[Link]);
</div> }
[Link]=function(){
[Link]('Tu viens de sortir de l\'élément '+ [Link]+
<div class="Pub"> ' 1ere version');
<span>Pub 1</span> }
Client Side
Inconvénients :
Ancienne version.
Impossibilité de créer plusieurs
fois le même événement, si vous le
créer plusieurs fois il n’executera
que le dernier.
console 91
Gestion des évènements : DOM-2
La détection des événement sera réalisée à travers la méthode
addEventListner()
Un booléen (False par défaut) qui permet de spécifier quelle phase utiliser
False : Phase de bouillonnement y inclut la cible
True : Phase de capture
Dans le cas d’une Phase de capture l’élément le plus profond est le dernier à
s’exécuter.
92
Gestion des évènements : L’objet Event
L’objet Event permet de récupérer des information sur l’événement
déclenché
N’est récupérable que dans une fonction associé à un événement
[Link](‘click’,f(e){alert( e );})
Tester ce code et vérifier le contenu de l’objet event dans la console
Client Side
var nod=[Link]("item");
[Link]('click',function (e) {
[Link](e);
[Link]('Bonjour je suis l\'objet'+
[Link]+'et mon contenu est : '+[Link]);
});
L’une des méthodes la plus utilisée est preventDefault()qui permet
d’annuler l’événement par exemple bloquer l’envoi d’un formulaire
Maintenant et selon votre besoin utiliser et étudier ces propriétés.
93
Les formulaires
94
Références
95