JavaScript est un langage de programmation qui permet de rendre un site web interactif (par exemple pour réaliser des jeux, afficher des réponses de façon dynamique lorsque l'utilisateur clique sur un bouton ou saisit des données, animer la page). Avec cet article, vous serez en mesure d'utiliser le bases de ce langage et de réaliser ce qu'il est possible de faire avec JavaScript.
Qu'est-ce que JavaScript ?
JavaScript (souvent abrégé en « JS ») est un langage de programmation qui peut interagir avec un document HTML pour le rendre dynamique. Ce langage a été inventé par Brendan Eich qui est le co-fondateur du projet Mozilla, de la fondation Mozilla et de la corporation Mozilla.
JavaScript peut être utilisé pour créer de nombreuses fonctionnalités. Pour commencer, il peut être utilisé pour réaliser des galleries d'images, des transformations pour l'affichage de la page, des réactions à des clics des utilisateurs. Utilisé de façon avancée, JavaScript vous permettra même de créer des jeux vidéo, des graphiques animés en 2D ou en 3D, des applications qui utilisent des bases de données et plus encore !
JavaScript est plutôt compact et très flexible. Les développeurs ont écrit de nombreux outils qui reposent sur JavaScript afin de pouvoir exploiter des fonctionnalités supplémentaires très simplement. Parmi ces outils, on retrouve :
- Les Application Programming Interfaces (plus communément appelées API) sont intégrées aux navigateurs web et permettent de manipuler le HTML, de définir les styles CSS, de manipuler un flux vidéo depuis la webcam de l'utilisateur, de générer des graphiques en 3D, etc.
- Les API « tierces » développées en dehors des navigateurs permettent aux développeurs d'intégrer des fonctionnalités d'autres sites dans leur site (par exemple de Twitter ou Facebook).
- Les frameworks et bibliothèques tierces qui peuvent être utilisées avec votre code permettent de rapidement mettre en œuvre des sites et des applications.
L'exemple du « hello world »
La section précédente semble vraiment excitante, JavaScript est l'une des technologies web les plus puissantes et créatives. Une fois que vous commencerez à être autonome en JavaScript, vous verrez une nouvelle dimension s'ouvrir pour vos sites web.
Cependant, JavaScript est plus complexe et moins accessible que HTML ou CSS. Il faudra progresser, étape par étape, en commençant par des petits projets. Pour commencer, nous allons utiliser JavaScript de façon vraiment basique pour affiche « Hello world!», pouvant se traduire par « Coucou le monde ! » (c'est une « tradition » que de commencer à développer avec un langage en écrivant un programme qui affiche « Hello world », voir d'autres exemples sur Wikipédia).
Important : Si vous rejoignez cette série d'articles en cours de route, téléchargez cet exemple de code pour l'utiliser comme point de départ.
- Pour commencer, dans le dossier
scripts
, créez un fichier appelémain.js
. - Ensuite, dans votre fichier
index.html
, ajoutez l'élément suivant sur une nouvelle ligne avant la balise fermante</body>
:<script src="scripts/main.js"></script>
- Cet élément a le même rôle que l'élément
<link>
pour CSS : il permet d'utiliser le fichier qui contient le code JavaScript pour l'appliquer sur la page afin qu'il puisse interagir avec le HTML, le CSS et le reste de la page. - Dans le fichier
main.js
, ajoutez les lignes suivantes :var monTitre = document.querySelector('h1'); monTitre.textContent = 'Hello world!';
- Assurez-vous que les fichiers HTML et JavaScript soient enregistrés puis chargez
index.html
dans votre navigateur. Vous devriez obtenir quelque chose comme :
Note : Nous avons mis l'élément <script>
presque à la fin du fichier HTML, plus précisément à la fin de l'élément body. Pourquoi ? Cela permet en fait que JavaScript soit chargé après le reste du HTML et que l'utilisateur ait une page fonctionnelle même si le JavaScript n'a pas encore été chargé. Si l'élément script avait été placé avant et que le code JavaScript devait interagir avec le contenu HTML à venir, cela ne fonctionnerait pas et l'utilisateur verrait une page cassée.
Que s'est-il passé ?
Le texte de votre titre a été changé en « Hello world! » en utilisant JavaScript. Pour cela, on a utilise une fonction appelée querySelector()
qui fait référence à l'élément de titre et qui le stocke dans une variable appelée monTitre
. C'est assez proche de ce qu'on a fait en CSS avec les sélecteurs. Lorsqu'on souhaite manipuler un élément, il faut d'abord le sélectionner.
Après, on modifie la valeur de la propriété textContent
de la variable monTitre
, cette propriété représente le contenu de l'élément. Dans notre exemple, on modifie le contenu de l'élément avec "Hello world!".
Rapide introduction aux bases de JavaScript
Nous allons explorer les fonctionnalités de base de JavaScript pour que vous puissiez mieux comprendre comment il fonctionne. Ces fonctionnalités sont communes à la plupart des langages de programmation, si vous comprenez ces éléments en JavaScript, vous serez plus à l'aise pour découvrir un autre langage et développer avec.
Important : Tout au long de cet article, vous pouvez saisir les lignes de code dans votre console JavaScript pour voir ce qui se passe. Pour plus de détails sur les consoles JavaScript, vous pouvez lire Découvrir les outils de développement présents dans le navigateur.
Variables
Les variables sont des conteneurs dans lesquels on peut stocker des variables. Pour commencer, il faut déclarer une variable avec le mot-clé var
suivi du nom qu'on souhaite utiliser pour la variable :
var maVariable;
Note : En JavaScript, les lignes de code doivent terminer par un point-virgule pour indiquer que c'est la fin de la ligne. Si vous n'ajoutez pas les points-virgules en fin de ligne, vous pourrez avoir des comportements inattendus, voire des erreurs.
Note : Vous pouvez utiliser (quasiment) n'importe quel nom pour nommer une variable. Il y a quelques restrictions sur ces noms qui sont expliquées dans cet article.
Note : JavaScript est sensible à la casse, cela signifie que maVariable
sera considéré comme un nom différent de mavariable
. Si vous avez des problèmes sur les noms de variables dans votre code, vérifiez la casse que vous utilisez !
Une fois que vous avez déclaré une variable, vous pouvez lui donner une valeur :
maVariable = 'Bob';
Pour utiliser la valeur plus loin dans le code, il suffit de faire appel à la variable en utilisant son nom :
maVariable;
Lorsque vous créez une variable et que vous lui donnez une valeur, vous pouvez le faire sur une seule ligne :
var maVariable = 'Bob';
Une fois qu'on a donné une valeur à une variable, on peut la changer plus loin :
var maVariable = 'Bob'; maVariable = 'Patrick';
Les variables sont réparties en différents types de données :
Variable | Explication | Exemple |
---|---|---|
String | Une chaîne de texte. Pour déclarer une chaîne de caractères, il faut placer la valeur entre des quotes ('). | var maVariable = 'Bob'; |
Nombre | Un nombre. Les nombres n'ont pas de quote. | var maVariable = 10; |
Booléen | Un valeur qui signifie vrai ou faux. true /false sont des mots-clés spéciaux en JavaScript, il n'est pas nécessaire d'utiliser des quotes. |
var maVariable = true; |
Tableau | Une structure qui permet de stocker plusieurs valeurs dans une seule variable. | var maVariable = [1,'Bob','Patrick',10]; On peut ensuite utiliser chaque membre du tableau en utilisant maVariable[0] , maVariable[1] , etc. |
Objet | Un objet peut être n'importe quoi. Un objet est un ensemble de propriétés qui peut être enregistré dans une variable. C'est la structure la plus utilisée et la plus flexible. | var maVariable = document.querySelector('h1'); |
Pourquoi a-t-on besoin de variables ? Et bien parce qu'elles sont essentielles à la programmation. Si les valeurs ne pouvaient pas changer, on ne pourrait rien faire de dynamique. Par exemple, on ne pourrait pas personnaliser un message de bienvenue ou changer l'image affichée dans une galerie.
Les commentaires
De la même façon qu'en CSS, il est possible d'intégrer des commentaires dans du code JavaScript :
/* Voici un commentaire qui peut être sur plusieurs lignes */
Si votre commentaire tient sur une ligne, vous pouvez utiliser deux barres obliques pour indiquer un commentaire :
// Voici un commentaire
Les opérateurs
Un opérateur est un symbole mathématique qui produit un résultat en fonction de plusieurs valeurs (la plupart du temps on utilise deux valeurs et un opérateur). Le tableau suivant liste certains des opérateurs les plus simples ainsi que des exemples que vous pouvez tester dans votre console JavaScript.
Opérateur | Explication | Symbole(s) | Exemple |
---|---|---|---|
Somme / Concaténation | Il peut être utilisé pour calculer la somme de deux nombres ou pour concaténer (coller) deux chaînes ensemble. | + |
6 + 9; |
Soustraction, multiplication, division | Les opérations mathématiques de base. | - , * , / |
9 - 3; |
Opérateur d'affectation | On a déjà vu cet opérateur : il permet d'affecter une valeur à une variable. | = |
var maVariable = 'Bob'; |
Opérateur d'identité | Il permet de tester si deux valeurs sont égales et il renvoie un booléen true /false comme résultat. |
=== |
var maVariable = 3; |
Opérateur de négation et opérateur d'inégalité | Souvent utilisé avec l'opérateur d'égalité, l'opérateur de négation est l'équivalent, en JavaScript, d'un NON logique (il transforme la valeur true en false et vice versa) |
! , !== |
On teste ici "
|
Il y a plein d'autres opérateurs mais nous nous en tiendrons à ceux-là pour le moment. Si vous voulez avoir la liste complète, vous pouvez vous rendre sur la page qui détaille les expressions et les opérateurs.
Note : Attention lorsque vous utilisez les opérateurs, si vous utilisez différents types de données avec un même opérateur, le résultat que vous obtiendrez pourra vous surprendre. Pour voir ce que ça donne, essayez de voir le résultat fourni par "35" + "25"
en utilisant cette instruction dans votre console. Pourquoi obtient-on ce résultat ? Parce que les nombres sont entourés de guillemets et sont donc considérés comme des chaînes de caractères, on obtient donc une chaîne concaténée. Si vous utilisez 35 + 25
, vous obtiendrez le bon résultat.
Les structures conditionnelles
Les structures conditionnelles sont des éléments du code qui permettent de tester si une expression est vraie ou non et d'exécuter des instructions différentes selon le résultat. La structure conditionnelle utilisée la plus fréquemment est if ... else
. Par exemple :
var parfumGlace = 'chocolat'; if (parfumGlace === 'chocolat') { alert("J'adore la glace au chocolat !"); } else { alert("J'aurai préféré du chocolat."); }
L'expression contenue dans if ( ... )
correspond au test qu'on souhaite effectuer. Ici, on utilise l'opérateur d'identité pour comparer la variable parfumGlace
avec la chaîne de caractères "chocolat" et voir si elles sont égales. Si cette comparaison renvoie true
, le premier bloc de code sera exécuté. Sinon, c'est le code du second bloc, celui présent après else
qui sera exécuté.
Les fonctions
Les fonctions permettent d'organiser des fonctionnalités qu'on souhaite pouvoir réutiliser. Par exemple, si on veut exécuter deux fois la même action, plutôt que de recopier le code, on pourra écrire une fonction une fois puis l'utiliser aux deux endroits souhaités. Nous avons déjà utilisé des fonctions :
-
var maVariable = document.querySelector('h1');
-
alert('Coucou !');
Ces fonctions (querySelector
et alert
) sont disponibles dans le navigateur et vous pouvez les utiliser où bon vous semble.
Si vous voyez quelque chose qui ressemble à un nom de variable et qui est suivi de parenthèses, c'est probablement une fonction. Les fonctions peuvent utiliser des arguments pour effectuer leurs calculs. Les arguments sont placés entre les parenthèses, séparés par des virgules s'il y en a plusieurs.
Par exemple, la fonction alert()
fait apparaître une fenêtre de pop-up dans la fenêtre du navigateur et on peut utiliser un argument pour indiquer à la fonction ce qu'on souhaite écrire dans cette fenêtre.
En plus des fonctions déjà existantes, vous pouvez définir vos propres fonctions ! Par exemple, vous pouvez écrire une fonction toute simple qui prend deux arguments et qui renvoie le résultat de la multiplication :
function multiplier(num1,num2) { var résultat = num1 * num2; return résultat; }
Vous pouvez déclarer cette fonction dans la console avant de l'utiliser plusieurs fois :
multiplier(4,7); multiplier(20,20); multiplier(0.5,3);
Note : L'instruction return
indique au navigateur qu'il faut renvoyer la variable résultat
en dehors de la fonction afin qu'elle puisse être réutilisée par ailleurs. Cette instruction est nécessaire car les variables définies à l'intérieur des fonctions sont uniquement disponibles à l'intérieur de ces fonctions. C'est ce qu'on appelle une portée (pour en savoir plus, vous pouvez lire cet article).
Les événements
Pour qu'un site web soit vraiment interactif, vous aurez besoin d'événements. Les événements sont des structures de code qui « écoutent » ce qui se passent dans le navigateur et qui permettent de déclencher des actions lorsque quelque chose de particulier se passe. Le meilleur exemple est l'événement de clic, qui est déclenché lorsque l'utilisateur clique sur quelque chose dans le navigateur. Pour voir ce que ça donne en pratique, saisissez ces quelques lignes dans la console puis cliquez sur la page sur laquelle vous êtes :
document.querySelector('html').onclick = function() { alert('Aïe, arrêtez de cliquer !!'); }
Il existe plein de méthodes pour « attacher » un événement à un élément. Dans cet exemple, nous avons sélectionné l'élément HTML concerné et nous avons défini un gestionnaire onclick
qui est une propriété qui est égale à une fonction anonyme (elle n'a pas de nom) qui contient le code à exécuter quand l'utilisateur clique.
On pourra noter que :
document.querySelector('html').onclick = function() {};
est équivalent à :
var maHTML = document.querySelector('html'); maHTML.onclick = function() {};
La première syntaxe est simplement plus courte.
Booster notre site web
Maintenant que nous avons vu quelques bases en JavaScript, nous allons ajouter quelques fonctionnalités intéressantes à notre site pour voir ce qu'il est possible de faire.
Pouvoir changer l'image en cliquant dessus
Dans cette section, nous allons ajouter une autre image au site et ajouter un peu de JavaScript pour alterner entre les images lorsqu'on clique sur l'image affichée.
- Tout d'abord, trouvez une deuxième image que vous souhaiteriez afficher sur votre site. Essayez de prendre une image de même taille.
- Enregistrez cette image dans votre dossier
images
. - Dans le fichier
main.js
, entrez ce code JavaScript (si votre code « Coucou le monde » est toujours là, vous pouvez le supprimer) :var monImage = document.querySelector('img'); monImage.onclick = function() { var maSrc = monImage.getAttribute('src'); if(maSrc === 'images/firefox-icon.png') { monImage.setAttribute ('src','images/firefox2.png'); } else { monImage.setAttribute ('src','images/firefox-icon.png'); } }
- Sauvegardez les différents fichiers puis chargez
index.html
dans votre navigateurs. Quand vous cliquez sur l'image, cela devrait désormais passer à la deuxième !
Dans cet exemple, nous utilisons une référence vers l'élement img grâce à la variable monImage
. Ensuite, on définit une fonction anonyme qui doit être utilisée comme gestionnaire d'événement onclick
. Cette fonction définit ce qui se passe à chaque fois qu'on clique sur l'élément de l'image :
- On récupère la valeur de l'attribut
src
de l'image. - On utilise une structure conditionnelle pour voir si la valeur de
src
est égale au chemin de l'image originale :- Si le chemin est égal, on change la valeur de
src
pour utiliser le chemin de la deuxième image, ce qui force cette image à être chargée dans l'élément<image>
. - Si le chemin est différent (ce qui signifie que l'image a déjà été changée), on modifie la valeur de
src
pour aller chercher la première image et l'afficher.
- Si le chemin est égal, on change la valeur de
Ajouter un message d'accueil personnalisé
Continuons en ajoutant encore un peu de code pour changer le titre de la page afin d'inclure un message d'accueil personnalisé pour le visiteur du site. Ce message d'accueil sera conservé quand l'utilisateur quittera le site et s'il y revient. Nous ajouterons également une option pour pouvoir changer l'utilisateur et le message d'accueil si besoin.
- Dans le fichier
index.html
, ajoutez la ligne suivante avant l'élément<script>
:<button>Change user</button>
- Dans le fichier
main.js
, ajoutez le code suivant à la fin du fichier. Cela fait référence au nouveau bouton qu'on vient d'ajouter et à l'élément de titre puis enregistre ces références dans des variables :var monBouton = document.querySelector('button'); var monTitre = document.querySelector('h1');
- Ajoutons maintenant les fonctionnalités pour avoir ce message d'accueil personnalisé (ça ne servira pas immédiatement mais un peu plus tard) :
function définirNomUtilisateur() { var monNom = prompt('Veuillez saisir votre nom.'); localStorage.setItem('nom', monNom); monTitre.textContent = 'Mozilla est cool, ' + monNom; }
Cette fonction utilise la fonctionprompt()
qui permet d'afficher une boîte de dialogue. Elle fonctionne de façon semblable à alert() sauf qu'elle permet à l'utilisateur de saisir des données et d'enregistrer ces données dans une variable lorsque l'utilisateur clique sur OK. Dans notre exemple, nous demandons à l'utilisateur de saisir son nom. Ensuite, nous appelons une API appeléelocalStorage
. Cette API permet de stocker des données dans le navigateur pour pouvoir les réutiliser ultérieurement. Nous utilisons la fonctionsetItem()
de cette API pour stocker la donnée qui nous intéresse dans un conteneur appelé'nom'
. La valeur stockée ici est la valeur de la variablemonNom
qui contient le nom saisi par l'utilisateur. Enfin, on utilise la propriététextContent
du titre pour lui affecter un nouveau contenu. - Ajoutons ensuite ce bloc
if ... else
. Ce code correspond à l'étape d'initialisation car il sera utilisé la première fois que la page est chargée par l'utilisateur :if(!localStorage.getItem('nom')) { définirNomUtilisateur(); } else { var nomEnregistré = localStorage.getItem('nom'); monTitre.textContent = 'Mozilla est cool, ' + nomEnregistré; }
Ce bloc utilise l'opérateur de négation (NON logique) pour vérifier si le navigateur possède une donnée enregistrée appeléenom
. Si non (ce qui correspond au cas où c'est la première visite de l'utilisateur), la fonctiondéfinirNomUtilisateur()
est appelée pour créer cette donnée. Si cette donnée est déjà enregistrée (ce qui correspond au cas où l'utilisateur est déjà venu sur la page), on la récupère avec la méthodegetItem()
et on définit le contenu detextContent
pour le titre avec une chaîne suivie du nom de l'utilisateur (c'est équivalent à ce qu'on fait dansdéfinirNomUtilisateur()
). - Enfin, on associe le gestionnaire
onclick
au bouton. De cette façon, quand on clique sur le bouton, cela déclenchera l'exécution de la fonctiondéfinirNomUtilisateur()
. Ce bouton permettra à l'utilisateur de modifier la valeur s'il le souhaite:monBouton.onclick = function() { définirNomUtilisateur(); }
Récapitulons : la première fois que l'utilisateur viste le site, il sera invité à saisir un nom d'utilisateur. Ce nom sera utilisé pour afficher un message d'accueil personnalisé. Si l'utilisateur souhaite changer son nom, il peut utiliser le bouton. En supplément, le nom est enregistré pour plus tard grâce à l'API localStorage
, cela permet à l'utilisateur de retrouver son nom, même s'il a fermé la page et/ou le navigateur et qu'il revient plus tard !
Conclusion
Si vous avez suivi les étapes détaillées sur cette page, vous devriez obtenir un résultat semblable à celui-ci (vous pouvez aussi voir la version que nous avons obtenue ici) :
Si vous êtes bloqué, n'hésitez pas à comparer votre travail et vos fichiers avec ceux disponibles sur GitHub qui correspondent à notre modèle finalisé.
Au fur et à mesure de cet article, nous n'avons fait qu'effleurer la surface de JavaScript. Si vous avez envie d'en savoir plus sur JavaScript, vous pouvez utiliser notre Guide JavaScript.