Le javascript pour dynamiser notre code

Le principe!¶
Le cours précédent rappelle que le HTML décrit le contenu des pages web que le CSS vient par la suite le formater. Il ne s'agit pas d'un langage de programmation et on ne peut donc pas interagir avec des événements comme le clic de la souris, l'appui sur une touche du clavier ou le chargement d'une page...
Le javascript est un langage de programmation créé en 1995 et intégré au navigateur Netscape Navigator afin de dynamiser les pages webs statiques. À une action d'un utilisateur, on peut par exemple associer un comportement comme le changement de couleur d'un texte, d'un paragraphe,...
Distinction importante!
Le javascript est un langage de programmation et le HTML un langage de description!
Le Document Object Model (D.O.M)¶
Le DOM est la représentation schématique et hiérarchique de votre page web permettant de visualiser l'ensemble des balises HTML qui la constituent.
Le javascript agit sur les objets du DOM. Il les repère soit par le nom de leur balise soit par leur idendifiant (id) ou bien encore leur classe (class).
Rôle du Javascript
Le javascript est un langage de programmation qui agit sur le DOM.
Il peut:
- modifier des éléments du DOM: changer la couleur d'un élément, changer la fonte des polices, ...
- ajouter des éléments au DOM: ajouter un titre, une image, un lien,...
- faire disparaître des éléments dans la page
- ...
Ces diverses actions font suite à des événements comme le clic de souris, la manipulation du clavier ou encore le chargement de la page web...
Nous allons proposer plusieurs manipulations dans la conception d'un jeu.
Le jeu du juste nombre¶
Ce jeu est connu: quelqu'un propose un nombre entre 1 et 100 et vous devez le retrouver avec les indications plus ou moins.
Pour jouer, je vous propose l'interface web suivante:

Construire son arborescence
- Créer un dossier
jeujscontenant les dossiersimg, cssetjs. Attention de bien respecter la casse! - Téléchargez puis enregistrez le fichier
index.html(ici) à la racine du dossierjeujset le fichiermonstyle.css(là) dans le dossiercss. - Visualiser alors le fichier
index.htmlavec un navigateur. Normalement, il y a comme un souci...
Cette interface contient du code HTML,CSS mais pas encore du Javascript donc aucune interaction possible pour le moment.
Vous remarquez que le css n'est pas chargé et l'affichage est plutôt brut et pas trop joli.
Attachez la feuille de style
- Modifiez le document
HTMLen attachant la feuille de style contenu dans le dossierjs. Regardez dans le TP Développement Web pour vous rappeler la manipulation. - Enregistrez et rafraichissez la page WEB.
- Appelez votre professeur pour validation.
À ce stade, aucune intéraction n'est possible. Vous pouvez appuyer sur le bouton ou saisir une valeur, il ne se passera rien...
Intégration du js
Nous allons petit à petit intégrer du code javascript pour pouvoir jouer.
Construction du jeu¶
Personnaliser l'interface¶
Je vous propose tout d'abord qu'au chargement de la page:
- un prompt s'ouvre pour demander votre prénom
- votre prénom sera alors intégrer à la page web
Tout cela se fait assez facilement... Mais,
Où met-on le javascript?
- Le principe est le même que pour le
css. On fabrique un fichierjs, par exemplemonscript.jsqu'on enregistre dans le dossierjs. - On indique au fichier html (donc le fichier
index.html) qu'un fichierjsagit sur ces éléments. Pour cela, on ajoute en fin de code (juste avant la fermeture la balisebodyet juste après la barre de commentaires de couleur verte), le code suivant:🌍 Code HTML<script type="text/javascript" src="js/monscript.js"></script>
Création de votre premier js
- Dans
Notepad++ouvscode, créer le fichiermonscript.js,ajouter les lignes suivantes et enregistrez-le dans le bon dossier:JavaScriptlet pnom = window.prompt("Quel est votre prénom!"); // creation d'un variable document.getElementById("nom").innerHTML = "<h2>Bonne chance," + pnom + "</h2>"; // Ajout d'un élément HTML - Comme indiqué ci-dessus, ajouter au fichier
index.htmlle lien vers le fichierjs. - Enregistrez et rafraichissez la page.
Vous remarquerez que les instructions javascript finissent toujours par un ;.
Félicitations!
Vous venez de créer votre première action en Javascript.
Il faut maintenant avancer pour pouvoir jouer...
Création des variables¶
Pour jouer, il faut créer des variables qui gardent en mémoire l'état du jeu. À savoir:
- une variable
nombreSecretdont la valeur est choisie par l'ordinateur; - une variable
nbTentativesdont la valeur initiale est 0; - une variable
partieTermineeinitialisée àfalse; - une variable
historiquede typelistepour enregistrer les choix faits par le joueur.
Déclaration des variables
Ajouter les variables suivantes au fichier monscript.js:
let nombreSecret;
let nbTentatives = 0;
let partieTerminee = false;
let historiqueTentatives = [];
J'ai déclarée la variable nombreSecret sans l'initialiser. En python il faudrait utiliser la biliothèque random , en javascript cela donne ceci:
nombreSecret = Math.floor(Math.random() * 100) + 1;
Nombre aléatoire
Ajouter cette instruction à la suite du fichier js.
Proposer et comparer¶
Il s'agit maintenant de proposer un nombre dans la zone de saisie puis:
- de comparer notre proposition à la valeur de
nombreSecret - d'afficher le bon message
- d'afficher dans l'historique, la proposition déjà effectuée.
- d'incrémenter le compteur
nbTentatives
On va coder tout cela en js:
// capturer la valeur saisie dans le input
const input = document.getElementById('inputNombre');
const proposition = parseInt(input.value);
// incrementation compteur
nbTentatives++;
// ajout du choix à la liste
historiqueTentatives.push(proposition);
// Mise à jour de l'affichage
document.getElementById('tentatives').textContent = nbTentatives;
// comparer
if (proposition === nombreSecret) {
partieTerminee = true; // dans ce cas la partie est terminée
const messageDiv = document.getElementById('message');
messageDiv.textContent = `🎉 Bravo ! Vous avez trouvé ${nombreSecret} en ${nbTentatives} tentatives !`;
}
else if (proposition < nombreSecret) {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📈 C\'est plus grand !";
}
else {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📉 C\'est plus petit !";
}
// ajouter à la liste des choix celui qui vien d'être fait
const liste = document.getElementById('tentatives-list');
const div = document.createElement('div');
div.className = 'tentative';
div.textContent = proposition;
liste.appendChild(div);
Ajoutons à la fin de ce code deux instructions pratiques pour réinitailiser le champ de saisie d'abord puis garder le focus sur ce champ (inutile de clicker à chaque fois...)
input.value = '';
input.focus();
Jouons!!
Ajouter dans cet ordre les codes javascript précédent.
Pensez à enregistrer!!
Je suis nul, ça marche pas!!!
Quand vous proposez un nombre et que vous appuyez sur le bouton DEVINER, rien ne se passe !
C'est tout à fait normal! Le code javascript réagit à un événement comme le clic de souris par exemple.
Le bouton DEVINER
Inspecter le code source et vous constaterez que le bouton DEVINER a un attribut onclick dont la valeur est la fonction deviner().
Cela signifie qu'à l'appui sur ce bouton, sera exécutée la fonction deviner().
Mais...
On n'a pas de fonction deviner() dans le js
Effectivement, elle n'existe pas encore. En fait, le corps de cette fonction contient toutes les instructions que nous avons saisies précédemment. On va donc créer cette fonction, c'est facile!
Création d'une fonction javascript
Vous allez modifier votre js en mettant les instructions du jeu dans une fonction. Vous avez le code source juste après.
Code du js
let pnom = window.prompt("Quel est votre prénom!"); // creation d'un variable
document.getElementById("nom").innerHTML = "<h2>Bonne chance," + pnom + "</h2>"; // Ajout d'un élément HTML
let nombreSecret;
let nbTentatives = 0;
let partieTerminee = false;
let historiqueTentatives = [];
function deviner(){
// capturer la valeur saisie dans le input
const input = document.getElementById('inputNombre');
const proposition = parseInt(input.value);
// incrementation compteur
nbTentatives++;
// ajout du choix à la liste
historiqueTentatives.push(proposition);
// Mise à jour de l'affichage
document.getElementById('tentatives').textContent = nbTentatives;
// comparer
if (proposition === nombreSecret) {
partieTerminee = true; // dans ce cas la partie est terminée
const messageDiv = document.getElementById('message');
messageDiv.textContent = `🎉 Bravo ! Vous avez trouvé ${nombreSecret} en ${nbTentatives} tentatives !`;
}
else if (proposition < nombreSecret) {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📈 C\'est plus grand !";
}
else {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📉 C\'est plus petit !";
}
// ajouter à la liste des choix celui qui vien d'être fait
const liste = document.getElementById('tentatives-list');
const div = document.createElement('div');
div.className = 'tentative';
div.textContent = proposition;
liste.appendChild(div);
input.value = '';
input.focus();
}
Enregistrez vos fichiers et jouez!!
Améliorer¶
Je vais proposer quelques améliorations légitimes.
Pour avoir créer une variable booléenne
Pour contrôler le déroulement du jeu.
Même si elle n'a pas été utilisée dans le code précédent, nous allons maintenant l'expoiter ainsi:
- si la valeur de
partieTermineeestfalsealors la partie se déroule jusqu'à proposer le bon nombre. - si le nombre est trouvée la valeur de
partieTermineepasse àtrueet le jeu s'arrête.
Mais dès que le jeu s'arrête je veux pouvoir recommencer à jouer. Pour cela, je vais faire apparaître un bouton Recommencer la partie qui va reinitialiser le jeu.
Voici, le code final du javascript qu'il faut utiliser:
Code du js
let pnom = window.prompt("Quel est votre prénom!"); // creation d'un variable
document.getElementById("nom").innerHTML = "<h2>Bonne chance," + pnom + "</h2>"; // Ajout d'un élément HTML
let nombreSecret;
let nbTentatives = 0;
let partieTerminee = false;
let historiqueTentatives = [];
nombreSecret = Math.floor(Math.random() * 100) + 1;
//reinitialisation des variables
function nouvellePartie() {
nombreSecret = Math.floor(Math.random() * 100) + 1;
nbTentatives = 0;
historiqueTentatives = [];
score = 100;
partieTerminee = false;
document.getElementById('tentatives').textContent = '0';
document.getElementById('message').innerHTML = '';
document.getElementById('inputNombre').value = '';
document.getElementById('btnNouvelle').style.display = 'none';
document.getElementById('inputNombre').disabled = false;
document.getElementById('tentatives-list').innerHTML = '';
}
function deviner(){
// capturer la valeur saisie dans le input
const input = document.getElementById('inputNombre');
const proposition = parseInt(input.value);
// incrementation compteur
nbTentatives++;
// ajout du choix à la liste
historiqueTentatives.push(proposition);
// Mise à jour de l'affichage
document.getElementById('tentatives').textContent = nbTentatives;
// comparer
if (proposition === nombreSecret) {
partieTerminee = true; // dans ce cas la partie est terminée
const messageDiv = document.getElementById('message');
messageDiv.textContent = `🎉 Bravo ! Vous avez trouvé ${nombreSecret} en ${nbTentatives} tentatives !`;
document.getElementById('inputNombre').disabled = true;
document.getElementById('btnNouvelle').style.display = 'block';
}
else if (proposition < nombreSecret) {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📈 C\'est plus grand !";
}
else {
const messageDiv = document.getElementById('message');
messageDiv.textContent = "📉 C\'est plus petit !";
}
// ajouter à la liste des choix celui qui vien d'être fait
const liste = document.getElementById('tentatives-list');
const div = document.createElement('div');
div.className = 'tentative';
div.textContent = proposition;
liste.appendChild(div);
// pour vider le champ de saisie et garder le focus dessus
input.value = '';
input.focus();
}
// Permettre la validation avec Entrée
document.getElementById('inputNombre').addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
deviner();
}
});
Tricher un peu...¶
Vous pouvez faire afficher le nombre choisi par le programme dans la console. Pour cela, deux questions se posent:
Où se trouve la console javascript?
Appuyez sur F12 et regarder dans l'onglet console
Comment afficher dans la console?
Facile. Ajouter le code suivant console.log(nombreSecret); quelque part(pas n'importe où non plus...) dans votre code et la valeur du nombre choisi par le programme sera alors affichée en console...
En mode classique¶
Au quotidien, vous accédez à un site web par l'intermédiaire d'un serveur web.
Accès serveur
L'accès à un serveur se fait par son URL(Uniform Resource Locator).
Par exemple, l'url de mon site est https://marcturro.github.io/. En fait, on peut aussi saisir l'adresse IP du site, à condition qu'elle soit fixe (ce qui n'est pas le cas pour mon site.. :bowtie:).
Nous allons donc déposer notre site sur un serveur web.
Serveur Web
Un serveur assure un ou plusieurs services. Un serveur web attend les sollicitations des clients et répond en envoyant le code HTML, css ,...
L'architecture classique des serveurs WEB est WAMP pour Windows Apache Mysql PHP. Si Apache assure le service WEB en gérant les requêtes, Mysql et PHP ont des rôles plus élaborés. Ils assurent:
- la gestion et communication avec une base de données avec MySql et PHP.
- la dynamique côté serveur avec PHP.
Javascipt assure aussi le dynamisme du site mais côté client.
Notre distribution
Nous allons utiliser une distribution plus légère et portable que WAMP: elle s'appelle UWAMP et est installée sur le réseau du lycée.

Utilisation d'un serveur web
- Tapez UWAMP dans la barre de recherche de windows et ouvrez-le.
- Normalement le serveur web démarre tout seul: sinon activez son démarrage.
- Appuyez sur le bouton
Dossier www: le dossier du même nom s'ouvre.Supprimez éventuellement son contenu - Déposez dans ce dossier votre site (
index.htmlet les deux dossierscssetjs) - Appuyez dans l'interface sur
Navigateur www. Vous devriez voir apparaître votre site.
Vous avez installé un serveur sur votre machine qui est aussi le client qui demande la ressource.
Localhost
L'url pour atteindre le serveur web sur sa propre machine est localhost. Son adresse IP est 127.0.0.1 sur le port 80.
Vous apprendez plus tard à paramétrer UWAMP pour que les autres ordinateurs de la salle (les clients) puissent se connecter à votre serveur web...