Course Java Script
Course Java Script
</body>
<script type="text/javascript">
// JavaScript source
...
</script>
</html>
2.2.1 Variables
Les données ou variables, sont connu par un nom. Le nom de variable commence par une lettre ou _ ou $,
éventuellement suivi par lettres, nombres ou soulignements. Les variables de JavaScript n'ont pas un type défini, il doit
être l’utilisateur à gérer le contenu avec instructions opportunes ; les variables peuvent contenir des données
numériques, des caractères et des objets avec leurs données (propriétés) leurs programmes (méthodes).
Toutes variables doivent être déclarées avant usage, éventuellement on leur peut assigner une valeur en utilisant la
syntaxe variable = expression :
escompte = 0.05; // variable numérique
Les chaînes de caractères sont renfermées entre guillemet ou entre apostrophes ; les caractères spéciaux, comme le
retour a la ligne (new line) et \, sont inséré préfixé par \, (escape) suivi par un nom symbolique (\n retour à la ligne),
soi même (\\, \", \') ou la valeur hexadécimal (\x5B = [) :
var info = "Condor Informatique – \x5BTurin\x5D"; // chaîne de caractères
L’indication var avant le nom de la variable indique que la variable est valable localement c’est-à-dire elle existe
seulement (portée ou scope) à l’intérieur de la fonction où elle est déclaré, donc elle n’est pas accessible au dehors de la
fonction ; si elle est déclarée au dehors d’une fonction elle est créée dans l’objet global1 accessible partout et sa
portée est globale.
Les nombres sont acceptés en notation décimal, octal et hexadécimal :
Notation Exemples Chiffres acceptées
décimale (base 10) 0, 117, -345 0-9
octale (base 8) 015, 0001, -077 0-7
hexadécimal (base 16) 0x1123, 0x00111, -0xF1A7 0-9 A B C D E F (casse indifférente)
☞ Il est le 0 avant le numéro qui indique la notation octale, donc 077 il est différent de 77 décimal.
1. Question
Quel est la valeur décimal de 077 ?
2.3 Opérateurs
Les données sont transformées par application de fonctions sur eux, mais normalement, surtout dans les calcules
arithmétiques, ils sont utilisée, par des raisons historiques, des opérateurs avec leur précédence et JavaScript, comme la
plupart des langages de programmation, suit ces conventions.
Opérateurs arithmétiques : * + - / %(reste de la division)
Opérateurs de comparaison : == (égale) < <= > >= != (divers)
Opérateurs Logiques : && (And), || (Or), ! (Not)
Opérateurs d'Enchaînement : +
Opérateur d'assignation : =
Opérateur virgule : , (pour séparer des instructions, dont la valeur de la dernière est retourné)
Autres : typeof, logiques sur les données (&, |, ~, ^...)...
Il y a différence entre opérateur d'assignation (=) et l’opérateur de comparaison (==).
L’opérateur + a deux usages2, lorsqu'il est utilisé avec chaîne de caractères et expression arithmétique il est un
opérateur de concaténation ; pour forcer l'évaluation de l'expression il est préférable d'utiliser des parenthèses :
expression valeur note
"El Condor "+7-12 NaN NaN (Not a Number)est une constante qui signifie valeur
3. Question
Combien d'opérateurs dans l'instruction ci-dessous et de quel type :
piGrec = 355/113 // 3.141592... (il y a Math.PI)
2.3.1 Assignation
La syntaxe de l’assignation est [var] variable = expression. Il y a aussi des formes abrégés où
l’opérateur = est préfixées par un autre opérateur : au lieu de variable = variable opérateur
expression la syntaxe est variable opérateur= expression.
+= Ajoute et assigne
-= Soustrait et assigne
*= Multiplie et assigne
/= Divise et assigne
Un cas particulier sont les opérateurs ++ et –- qu’additionnent ou soustraient 1 à une variable ; ils peuvent précéder ou
suivre la variable, en conséquence l’opération sera exécutée avant ou après l’évaluation de la variable.
2.4.3 Boucles
Les boucles permettent d’exécuter répétitivement un ensemble d’instructions ; on peut forcer la sortie de la boucle avec
l’instruction break.
2.4.3.1 Itérations
La plus simple forme de boucle est la boucle for :
for (variable=expression1;condition de sortie; modification de la variable)
Instruction(s)
L’exécution du for termine quand condition de sortie est satisfaite ou par l’instruction break.
numero = 2+Math.ceil(998*Math.random()); // integer number between 3 and 1000
signal = " premier";
for (i=3;i*i<=numero;i+=2)
if (numero % i == 0) {
signal = " pas premier";
break;
}
alert(numero+signal);
3 Objets Page 7
charAt etc. :
"Condor Informatique Turin".toLowerCase()
String.toLowerCase("Condor Informatique Turin")
☞On peut accéder à un single position d’une chaîne comme une matrice, mais seulement en lecture, par la syntaxe
string[index].
Il y a aussi des méthodes (obsolètes!), pour ajouter des TAGs stylistiques (HTML), par exemple "pig".big()
devient : <big>pig</big>.
Un des méthodes de l’objet String est String.fromCharCode qu’il engendre un caractère à partir de sa
représentation numérique :
alert(String.fromCharCode(0x261b,64)) // ☛@
3.3 Fonctions
La fonction est un ensemble d’instructions pour exécuter une tâche et éventuellement obtenir une valeur ; un synonyme
de fonction est routine, mais la diction de JavaScript est méthode.
Il y a des fonctions natives, sont les méthodes de l’objet window ou méthodes des objets tel que Date ou Math ;
mais naturellement on peut écrire des fonctions nouvelles pour les besoins de notre application.
3 Objets Page 8
3.3.1 Création
Une fonction a normalement un nom, des opérandes, une (possible) valeur de retour et quelque façon de la créer :
1) function nomFonction(operand1[,operand2[,...]]) {instruction(s)}
2) [var] nomFonction = function(operand1[,operand2[,...]]) {instruction(s)}
3) [var] nomFonction = new Function("operand1"[,"operand2"[,...]],
"instruction(s)");
4) [var] [functionName =] (operand1[,operand2[,...]]) => {instruction(s)}
☞ Dans la première façon (Function Declaration) la fonction est prise en charge au moment de l’analyse syntaxique
du code et pourtant elle peut être utilisée avant au après sa déclaration ; ceci il n’est pas le cas des deux autres formes
(Function Expressions) où la fonction est crée au moment de l’exécution du code.
☞ La quatrième forme de déclaration de fonction (fonction flèche) est concise et plus flexible, par exemple lorsque
le corps n'a qu'une seule instruction, c'est la valeur renvoyée comme dans la fonction log10 (numéro 4)).
3.3.2 Utilisation
Pour utiliser une fonction la syntaxe est :
[[var] variable =] maFonction(operande1[,operande2[,...]])
variable contiendra le résultat qui maFonction a calculée en base aux valeurs des opérandes. Il est possible
d'utiliser le résultat d'une fonction comme un opérande dans une autre fonction.
Les variables déclarées comme var sont accessibles uniquement à l'intérieur de la fonction, sans var elles sont créés
dans l'objet window et donc elles sont accessibles dans toutes les fonctions.
L’éventuel résultat calculé par la fonction est retourné par l’instruction return.
3 Objets Page 9
Jours = ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"];
function joinArray(array,glue) {
if (typeof glue == "undefined") var glue = ",";
return array.join(glue);
}
alert(joinArray(Jours)+"\n" + joinArray(Jours,";"));
Script 8: Nombre variable de paramètres et valeur par défaut
☞On peut accéder aux opérandes par la pseudo matrices arguments (existante à l’intérieur de la fonctions), où
arguments.length est le numéro des paramètres présents.
Le polymorphisme est une propriété des langages qui acceptent le même nom de fonction pour fonctions qui peuvent
avoir un nombre et ou type différent de paramètres ; en JavaScript le polymorphisme doit être résolu à l’intérieure de la
fonction, avec l’inspection des paramètres. Un exemple de polymorphisme est la méthode chaine.replace où le
deuxième paramètre peut être une ensemble de caractères ou une fonction.
3.3.3.3 Création de structures et préservation des valeurs
Les fonctions sont des objets qui peuvent contenir des propriétés ; elles sont créées avec la syntaxe nomObjet = new
nomFonction et dans la fonction les propriétés sont créées par this.nomDeProprieté. Les propriétés peuvent
être insérées aussi après la création de l’objet.
function person(fname,lname,age,eyecolor) {
Script 9: Les objets fonction this.firstname=fname;
this.lastname=lname;
this.age=age;
this.eyecolor=eyecolor;
}
staff = [];
staff["Doe"]=new person("John","Doe",50,"blue");
staff["Brush"]=new person("Dick","Brush",55,"blue");
staff["Doe"]["Sex"] = "Mâle" // ajoute proprieté
alert(staff["Doe"].age+staff["Doe"].Sex)
JavaScript n’as pas une déclaration de variable, comme static en C ou PHP, pour faire survivre une valeur dans la
fonction, pour qu'il soit accessible dans les appels suivants, on lui peut ajouter une propriété :
function sigma(value,index,matrice) {
if (typeof sigma["somme"] == "undefined") sigma["somme"] = 0;
sigma["somme"]+= value;
}
var a = Array();
for (var i=0;i<10;i++) a[i] = Math.random();
a.forEach(sigma);
alert(sigma["somme"])
3 Objets Page 10
return {publics}
}([operands]));
Notez la syntaxe pour définir (set) et obtenir (get) la propriété.
"()" à la fin de la déclaration permet son exécution immédiate et la fonction, avec les méthodes et propriétés
publiques retournées, est ajoutée à l'espace window (Anonymous Closure) ; ces dernières sont accessibles avec la
syntaxe :
nomFonction.nomMéthode(paramétres)
nomFonction.nomPropriété
Les parenthèses externes () sont nécessaires par compatibilité avec tous navigateurs ; les opérandes éventuels sont
des objets , de cette façon la fonction peut accéder à leurs propriétés et méthodes.
chain = (function() {// ************************ chain
var nRot = 1; // private variable
return {
rotate: function(data,n) { // rotate words
if (typeof n == "undefined") var n = nRot;
var re = /(.+)\s+(\w+)$/; // $1 all but last word, $2 last word
var a = data;
for (var i=0;i < n;i++) {a = a.replace(re, "$2 $1")}
return a;
},
count: function(data) {
return (data.split(" ")).length;
},
sort: function(data) {
dataMatrix = data.split(" ");
dataMatrix.sort();
return dataMatrix.join(" ");
},
push: function(data,item) {
return data+ " "+item;
}
}
}());
...
var str = "El Condor";
alert(chain.push(str,"pasa"));
Script 11: Fonctions pour traiter une chaîne de mots comme une matrice
13. Exercice
Ajoutez une méthode qui retourne la position d’un mot dans la chaîne.
3.3.3.5 Ajouter des méthodes à un objet
On peut ajouter des méthodes et propriétés à un objet, même aux objets natives. La méthode ou la propriété peut être
relative aux instances de l’objet ou à l’objet même ; dans le premier cas la méthode agisse sur un objet, dans le second
cas crée un objet : par exemple l’objet String a la propriété prototype qui est l’objet contenant les méthodes
pour agir sur les chaînes et la méthode fromCharCode pour créer des chaînes de caractères.
La syntaxe est :
objet.prototype.nouveauMethode = function(opérandes) {instructions};
objet.nouveauMethode = function(opérandes) {instructions};
String.fill = function(n,char) {
if (typeof char == "undefined") var char = " ";
var a1 = "";
var a2 = char;
while (n > 1) {
if (n %2 == 1) {
n--;
a1 += a2;
} else {
a2 += a2;
n /= 2;
}
}
return a1+a2;
}
3 Objets Page 11
String.prototype.rotate = function(n) { // rotate words
if (typeof n == "undefined") var n = 1;
var re = /(.+)\s+(\w+)$/; // $1 all but last word, $2 last word
var a = this;
for (var i=0;i < n;i++) a = a.replace(re, "$2 $1");
return a;
}
var condor = "Condor Informatique Turin";
alert((condor.rotate(2)));
alert(String.fill(3,"BA"));
3.4 Date
L’objet Date gère les dates à partir du 1 janvier 1970 ; il y a plusieurs façons de créer une date :
d = new Date(); // d contient la date du jour
d = new Date(milliseconds); // 0 est 1 janvier 1970
d = new Date(dateString); // ex. d=new Date("July 21, 1983
01:15:00");
d = new Date(année, mois, jour, heures, minutes, seconds, millisecondes);
☞ Seul année est nécessaire dans le dernier exemple.
L’Objet Date a plusieurs méthodes, soit pour prélever soit pour changer ses composants ; ici quelques-uns :
getDate(), setDate(jour) Retourne ou modifie le jour du mois (de 1-31)
getFullYear(), setFullYear(année) Retourne ou modifie l'année (quatre chiffres)
getHours(), setHours(heure) Retourne ou modifie l'heure (de 0-23)
getMilliseconds(), setMilliseconds(millis) Retourne ou modifie les millisecondes (de 0-999)
getMinutes(), setMinutes(minutes) Retourne ou modifie les minutes (de 0-59)
getMonth(), setMonth(mois) Retourne ou modifie le mois (de 0-11)
cetSeconds(), setSeconds(seconds) Retourne ou modifie les seconds (de 0-59)
☞ mois est une valeur entre 0 et 11 et jour entre 1 et 31 ; setDate(jour) accepte jours au dehors du
intervalle 1-31, et modifie la date de conséquence.
15. Exercices.
Prenez la date du jour et modifiez le jour par -1 et 32.
Vérifiez s'il est possible donner des valeurs au dehors du intervalle pour heures, minutes et seconds.
3 Objets Page 12
3.5 Math
L'objet Math contient des fonctions arithmétiques, trigonométriques, logarithmiques et quelques constantes comme π
(Math.PI) et e (Math.E).
Dans l’exemple suivant il sont utilisées :
Math.random qui donne un nombre réel casuel entre 0 (inclus) et 1 (exclus),
Math.ceil pour obtenir le nombre entier supérieur plus proche d’un nombre réel,
Math.pow(base,exposant).
function testKhi(n){
var a = Array(0,0,0,0,0,0);
for (var i=0; i < n;i++) a[Math.ceil(6*Math.random())-1] += 1;
var chi2 = 0;
for (i=0; i < 6;i++) chi2 += 6*Math.pow(a[i]-n/6,2)/n;
return chi2; // Probabilité d'erreur < 0,05 maximum 11,1
}
3.6 Introspection
Introspection est la capacité de examiner le type ou les propriétés d’un objet à run-time, in JavaScript il y a l’opérateur
typeof avec le réponses possibles : number, string, boolean, object, null et undefined; pour les
matrices il y a la méthode Array.isArray(obj).
L’ opérateur instanceof est utile pour contrôler le type d’une objet :
function complexNumber(real, imaginary) {
this.real = real;
this.imaginary = imaginary;
}
var point1 = new complexNumber(3,7);
var a = point1 instanceof complexNumber; // returns true
var b = point1 instanceof Object; // returns true
3 Objets Page 13
4 4 Gestion des erreurs
Si on a une instruction qui peut donner une erreur mais qui ne doit pas arrêter le programme, par exemple une réception
possible de données,on l’insère un bloc try et après un bloc catch où l'erreur est traitée, voir l'exemple ci-dessous :
try {
document.getElementById("notExistentID").value = "***";
}
catch(error) {
console.log(error);
console.log("The ID doesn't exists!");
// throw("The ID doesn't exists!");
}
finally {
console.log("Finally: after try-catch");
}
console.log("Continue");
Le script ci-dessus signale :
TypeError: "document.getElementById(...) is null"
<anonymous> http://127.0.0.1/condorinformatique/formgen/f.html:34
The ID doesn't exists!
Finally: after try-catch
Continue
Si on dé-comment l'instruction throw, les résultats sont les suivants ;
TypeError: "document.getElementById(...) is null"
<anonymous> http://127.0.0.1/condorinformatique/formgen/f.html:34
The ID doesn't exists!
Finally: after try-catch
uncaught exception: The ID doesn't exists!
L'instruction finally est toujours exécutée; les instructions après throw ne seront pas exécutées.
Comme on peut voir les CallBacks sont «imbriqués» ce qui ne facilite pas la compréhension du programme.
Script 21: Changer le nom du style CSS en nom JavaScript (Camel function)
element.setAttribute(nomAttribute,valeur)peut être utilisée pour définir l'attribut style.
valeur doit être une chaîne d’attributs avec la syntaxe CSS :
var elem = document.getElementById(id);
elem.setAttribute("style","width:500px; background-color: yellow;");
☞ car setAttribute remplace les styles existants les éventuelles modifications de la propriété style doivent
être exécutées après setAttribute.
6.2.5 Évents
L'objet document peut associer du code JavaScript à des événements qui ont lieu sur un de ces composants, le code
Dans les tags de HTML les noms des événements ne sont pas sensible à la casse, mais il n'est pas le cas de
JavaScript.
☞ La gestion de l'événement est différent dans IE et Firefox. Dans IE, il y a l’objet window.event, alors que
dans Firefox et d'autres W3C navigateurs conformes, l'événement est le premier paramètre de la fonction
associée à la gestionnaire d'événements ; en outre il y a des différences aussi dans certes propriétés.
Voir dessous comme écrire une fonction « cross browser ».
document.getElementById("div1").onclick = function(evt){
var event=window.event || evt;
var target=event.srcElement || event.target; // srcElement IE, target Firefox
alert(event.type+" "+target+" "+target.id)
};
Évents de la souris
onclick, ondblclick quand on pousse le bouton une ou deux fois,
onmousedown, onmouseup capture le début et la fin de l'action pousse bouton,
onmousemove quand la souris passe sur un objet,
onmouseover, onmouseout quand la souris entre et sort d'un objet.
7.2 Utilisation
Utilisation synchrone (déconseillée) Utilisation asynchrone
Création de l’objet XMLHttpRequest
Activation de la propriété onreadystatechange
Début de la communication avec la méthode open
Éventuel envoi de header(s) par la méthode
setRequestHeader
Envoi des donnes par la méthode send
Collecte de données par la propriété responseText
7 Ajax Page 23
AJAX.send(null);
return AJAX.responseText;
}
function callPHP() {
var cmd = 'wrapper.php';
cmd += "?eval='+encodeURIComponent($('cmd').value))"; // caractères spéciaux codifiés
cmd += "R"+ Math.random()+"=0"; // empêche à IE de retourner la cache
return(getData,cmd);
}
...
<form id='formulaire' >
Insérez une commande <input name="cmd" id="cmd" type="text" size=30>
<br>
<input type=button value='Evaluer' onClick='alert(callPHP())'/>
<input type=button value='GET Source' onclick='alert(getData("prova.js"))' />
</form>
Script 23: Ajax : exemple d'envoi de caractères ou de formulaire avec la méthode POST
7 Ajax Page 24
8 Graphiques
HTML5 introduit l'élément de balisage de toile <canvas ...>, qui est un conteneur utilisé pour réaliser des
graphiques à l'aide de JavaScript.
Le tag canvas veut essentiellement les attributs width et height, qui donnent la dimension en pixel de l'objet
graphique ; l'attribut id est utile pour l'individuer.
<canvas id="canvasID" width="300" height="300"></canvas>
L'objet DOM canvas dispose (indirectement) de plusieurs méthode pour créer et manipuler lignes, rectangles, arcs,
textes et images ; en fait, ces méthodes appartiennent à un objet HTML5 accessible via la méthode getContext :
var ctx=document.getElementById(canvasID).getContext("2d");
☞ Au début l’origine des coordonnées, le point (0,0), est dans le coin supérieur gauche ; les coordonnées de l'axe y
croissent vers le bas de l'écran.
La surface du dessin peut être limité par la méthode clip() qui coupe une région de n'importe quelle forme et
grandeur de l'original.
8.1 Couleurs
Les méthodes fillStyle, strokeStyle et shadowColor définissent les couleurs utilisée respectivement pour
le remplissage, les traits et les sombres. Les valeurs de couleur sont les mêmes que dans CSS:
Valeur #rrggbb ou #rgb fillStyle = '#800000' // rouge
hexadécimal strokeStyle = '#0f0' // vert
Figure 9: Couleurs
☞ couleur est un ensemble de caractères ou un objet gradient (voire parag. 8.6.3 Gradients).
rgba(rouge,vert,bleu,transparence) les valeurs des couleurs sont des nombres entiers entre 0 et
255 inclus, la valeur de transparence varie de 0 (transparent) à 1 (opaque).
function essayGround(canvasID,couleur) {
var id = document.getElementById(canvasID)
var ctx=id.getContext("2d");
ctx.fillStyle=couleur;
ctx.fillRect(0,0,id.width-1,id.height-1);
}
...
<input type=button value='Fond'
onClick='essayGround("canvas1","rgb(0,255,255)")'/>
8.2 Textes
Il y a deux méthodes pour dessiner du texte : fillText(text,x,y) et strokeText(text,x,y). Le premier
dessine la forme de texte remplie, le deuxième dessine le contour. Chaque méthode prévoit aussi un quatrième
argument optionnel pour la largeur maximale.
La propriété font spécifie la police du texte selon la syntaxe de la propriété CSS font-family.
Les propriétés textAlign et textBaseline servent pour aligner le texte, par exemple :
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
dessinent le texte centré sur les coordonnées données.
function essayText(ID) {
var ctx=document.getElementById(ID).getContext("2d");
8 Graphiques Page 25
ctx.fillStyle="#800000";
ctx.strokeStyle="#008000";
ctx.font = '24px Unknown Font, sans-serif'
ctx.textAlign = "center";
ctx.strokeText("strokeText",100,30);
ctx.fillText("fillText",100,65);
}
L’omission de la méthode closePath() a évité le dessin du bord diagonal du triangle, mais la méthode
☞ fill() considère la forme comme fermée.
8.4 Images
Les images en format PNG, GIF ou JPEG peuvent être utilisées dans le canevas, par la méthode drawImage() qui a
trois variantes (dx,dy sont les coordonnée du point d’insertion de l’image).
drawImage(image,dx,dy) l’image est insérée inchangée
8 Graphiques Page 26
drawImage(image,dx,dy,dw,dh) l’image est insérée modifié
drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh) l’image ou une partie est insérée et modifié
Le premier paramètre est une image : un TAG canvas ou img, qu’ils peuvent être accédé par son ID, ou un objet
Image, dont la propriété src peut être aussi une image sur le serveur et, dans ce cas, il faut attendre la fin de son
chargement (voir l’exemple).
function essayImage(canvasID,image) {
var id = document.getElementById(canvasID);
var ctx = id.getContext("2d");
ctx.fillStyle="#007FFF";
ctx.fillRect(0,0,id.width-1,id.height-1);
var img = new Image();
img.onload = function(){
ctx.drawImage(img,70,70);
ctx.drawImage(img,10,10,110,60);
ctx.drawImage(img,0,0,100,100,160,160,70,120);
}
img.src = image;
}
...
<input type=button value='Image'
onClick='essayImage("canvas1","images/condor.gif")'/
>
8 Graphiques Page 27
☞ Toutes transformations affectent seulement les dessins crée après les méthodes de transformation.
8.5.1 Sauvegarde et restauration
Les méthodes save() et restore() sont utiles dans la création de graphiques complexes ; save() mémorise
l’état actuel (matrice de transformations, couleurs, etc), et restore() récupéré l’état sauvé.
8.5.4 Rotation
La méthode rotate(angle) exécute une rotation du graphique, angle est en radiants. Cette méthode correspond
à une transformation qui agisse sur l’échelle et l’inclinaison contemporainement.
8 Graphiques Page 28
function textOut(ctx,txt,x,y,fnz) {
if (typeof fnz == "undefined") fnz = "strokeText";
ctx.save();
ctx.setTransform(1,0,0,1,0,0);
ctx[fnz](txt,x+ctx.canvas.width/2,-y+ctx.canvas.height/2)
ctx.restore();
}
...
textOut(ctx,"R'cos(\u03B1'/2)",20,-95,"fillText"); // \u03B1 est greque alpha
Script 31: Dessiner des textes dans les coordonnées cartésiennes
8.6.2 Ombres
La taille de l'ombre est la taille de l'objet, plus la taille de la zone de flou ; il y a quatre propriétés pour créer l’effet
d’ombrage :
shadowOffsetX 5
distances entre l’objet et l’ombre en pixel
shadowOffsetY -5
8.6.3 Gradients
Le gradient est une transition graduelle entre au moins deux couleurs, qui peut être appliqué à lignes et formes par les
méthodes strokeStyle() et fillStyle(). Le gradient est un objet qu’il peut être créée linéaire ou radial.
Les couleurs sont indiquées par la méthode de l’objet gradient addColorStop(position, couleur); où
position varie entre 0 et 1 et indique où, dans le gradient, s’arrête la couleur, de ce point la couleur se
transforme dans la prochaine couleur qu’il est atteint à son point d’arrêt :
var grd=ctx.createLinearGradient(0,0,150,0);
grd.addColorStop(0.3,'red');
grd.addColorStop(0.7,'green');
Dans l’exemple il y a rouge au début pour 3/10 du gradient, suivi d’une transition au vert qui termine a 7/10 du
gradient ; le reste est rempli par la dernière couleur (le vert).
8.6.3.1 Gradients linéaires
Le gradient est obtenu par lignes de couler parallèles.
grad = ctx.createLinearGradient(x0, y0, x1, y1);
Les paramétrés de la méthode sont les coordonnées de deux points qui individuent la direction des lignes de transition
et aussi la portion d’espace du canevas où il s’applique ; au dehors la couleur est la couleur des extrêmes:
var id = document.getElementById("canvas1");
var ctx = id.getContext("2d");
ctx.fillStyle="#00ff00";
var grd=ctx.createLinearGradient(50,50,150,150); // gradient diagonal
8 Graphiques Page 29
grd.addColorStop(0.0,'red');
grd.addColorStop(1,'green');
ctx.fillStyle=grd;
ctx.fillRect(0,0,id.width,id.height); // tous le canevas
ctx.strokeRect(50,50,100,100)
8.6.4 Motifs
La méthode createPattern(image, répétition) utilise l’image pour créer un objet motif. Le second
argument peut être une chaîne avec une des valeurs repeat (la valeur de défaut), repeat-x, repeat-y, et no-
repeat.
var ptrn = ctx.createPattern(img,'repeat');
ctx.fillStyle = ptrn;
ctx.fillRect(0,0,150,150);
8 Graphiques Page 30
var y = 50+rnd % 50;
data[4*(y*300+x)+3] = Math.floor(255*Math.random()); // set alpha
}
ctx.putImageData(canvasImg,-50,-50,50,50,50,50)
Script 35: putImageData
8 Graphiques Page 31
9 Annexes
9.1 Notes sur les expressions régulières
Une expression régulière est une chaîne de caractères utilisées pour rechercher, contrôler, extraire des textes dans un
texte ; elle a une syntaxe cryptique et ici il y a un esquisse avec quelques exemples.
L’expression régulière est renfermé entre // et peut être suivie par des modificateurs comme i pour ignorer la casse.
L’expression est formée avec les caractères à rechercher dans le texte et éventuels caractères de contrôle, entre celui-ci
il y a \ dit escape utilisée pour introduire les caractères de contrôle ou des catégories de caractères :
• \ escape caractère
• \w quelconque caractère alphabétique,
• \s des white space i.e. tabulation, line feed, form feed, carriage return, et espace,
• \d quelconque chiffre,
• quantificateurs, s’appliquent au(x) caractère(s) qui le(s) précèd(ent)
• * zéro ou plus caractères
• + un ou plus caractères
• ? 0 ou 1 caractère (éventuel)
• {n}, {n,} et {n,m} respectivement exactement n caractères, au moins n caractères et entre n et m
caractères.
• . (point) quelconque caractère
( ) renferment un groupe de caractères ;ce qui est renfermé est mémorisé dans les variables $1, $2, ...
[a-z] quelconque lettre entre a et z comprises.
$ (au fond de l’expression)
^ (au début de l’expression)
9.1.1 Exemples
/^\s*$/ ensemble vide ou avec (white) espaces
/aa+/ trouve une séquence de deux ou plus a, donc il intercepte aa, aaa,
....
/(\w+)\s+(\w+)\s+(\w+)/ trouve et mémorise trois mots
/(.+)\s+(\w+)$/; $1 tous les mots sauf le dernier, $2 le dernier mot
/(\-[a-z])/ trouve et mémorise tiret suivi d'une lettre
/\.(jpg|jpeg)$/i contrôles le type du fichier (ici jpg et jpeg), sans tenir compte de la
casse
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\. contrôle l’adresse courriel
[a-zA-Z]{2,4}$/
/^\d+$/ seulement nombres entiers
9 Annexes Page 32
9.2 Tables
9.2.1 Figures
Figure 1: Où se peut insérer JavaScript...............................................................................................................................1
Figure 2: Valeurs retournées pour déterminer le triage........................................................................................................7
Figure 3: Exemple utilisation du timer et onSubmit..........................................................................................................12
Figure 4: L'objet window...................................................................................................................................................18
Figure 5: Position relative au nœud (me)...........................................................................................................................20
Figure 6: Effacement d'un nœud........................................................................................................................................20
Figure 7: Quelques différences entre attributs et propriétés..............................................................................................21
Figure 8 : Événements onClick, onMauseOver, onMauseOut et l'objet this.....................................................................22
Figure 9: Couleurs.............................................................................................................................................................25
Figure 10: Matrice de transformation................................................................................................................................27
Figure 11: Propriétés pour l'ombrage.................................................................................................................................29
9.2.2 Scripts
Script 1: Deux façons de déclarer une matrice....................................................................................................................3
Script 2: Destructuring from Array and Object...................................................................................................................4
Script 3: Instruction switch..................................................................................................................................................5
Script 4: Teste si un nombre est premier (avec erreur)........................................................................................................5
Script 5: Exemple de forEach: somme des éléments d'une matrice....................................................................................5
Script 6: L'algorithme d'Euclide pour le plus grand commun diviseur...............................................................................6
Script 7: Exemples de la méthode replace...........................................................................................................................8
Script 8: Nombre variable de paramètres et valeur par défaut..........................................................................................10
Script 9: Les objets fonction..............................................................................................................................................10
Script 10: Création d'une variable permanente dans une fonction....................................................................................10
Script 11: Fonctions pour traiter une chaîne de mots comme une matrice........................................................................11
Script 12: Méthodes ajoutées (rotation de mots et remplissage).......................................................................................12
Script 13: Simulation du rouleau de dés et test du khi-carré.............................................................................................13
Script 14: Promise exemple: timer éventuellement effacée...............................................................................................16
Script 15: Async await exemple: premier timer éventuellement effacée...........................................................................16
Script 16: Async await exemple: Promise.all attend plusieurs événements......................................................................17
Script 17: Création d'une fenêtre.......................................................................................................................................19
Script 18: Contrôle pour id multiples................................................................................................................................19
Script 19: Ajouter un nœud dans le body et après un élément...........................................................................................20
Script 20: innerHTML et horloge brut...............................................................................................................................21
Script 21: Changer le nom du style CSS en nom JavaScript (Camel function).................................................................21
Script 22: Ajax : la méthode GET et communication synchrone......................................................................................24
Script 23: Ajax : exemple d'envoi de caractères ou de formulaire avec la méthode POST...............................................24
Script 24: Remplissage couleur de fond du canevas..........................................................................................................25
Script 25: Canevas: Textes.................................................................................................................................................26
Script 26: Canevas : triangle et cercle...............................................................................................................................26
Script 27: Les trois formes de drawImage.........................................................................................................................27
Script 28: Upload (synchrones) de l’image du canevas en format jpeg............................................................................27
Script 29: Canevas: déplacement de l'origine....................................................................................................................28
Script 30: Canevas: ellipse et effet miroir.........................................................................................................................28
Script 31: Dessiner des textes dans les coordonnées cartésiennes.....................................................................................29
Script 32: Canevas: gradient linéaire.................................................................................................................................30
Script 33: Canevas: gradient radial....................................................................................................................................30
Script 34: getImageData....................................................................................................................................................30
Script 35: putImageData....................................................................................................................................................31
Script 36: Contrôle de l’adresse courriel...........................................................................................................................32
9.2.3 Réponses
Question 1 63
Questions 2 1) 9, 2) Août, 3) 6
Question 3 1 opérateur d’assignation, 1 opérateur arithmétique.
Question 7 Quelques nombres pairs sont signalées comme premiers.
Question 8 Dans do ... while les instructions sont toujours exécutées une fois.
Question 9 1) le nom il n’est pas un nom valide. 2) le nom est contenu dans une variable.
Questions 11 1) moyenne arithmétique 2) object array
9 Annexes Page 33
Question 12 Efface le tiret et change en majuscule
la lettre qui suit (Camel function).
9 Annexes Page 34