Connexion élèves

Choisir le(s) module(s) à installer :

Interactions avec l'utilisateur : JavaScript

HTML et CSS servent à décrire et mettre en forme les pages web; pour gérer l'aspect "dynamique" d'un site web, et les interactions nécessaires avec l'utilisateur, il faut faire appel cette fois à un "vrai" langage de programmation, comme le JavaScript.

On peut alors interagir de très nombreuses façons avec une page web : cliquer sur un bouton pour modifier des couleurs, lancer un calcul ou une animation, faire des dessins ou tracer des courbes, etc...

Les bases du JavaScript

Vous connaissez en fait les éléments de base de JavaScript, car ce sont en réalité les mêmes qu'en Python ou autre langage : on y retrouve les notions de variables, de boucles, de tableaux, etc...

Toutefois, il y a de grandes différences dans la syntaxe, c'est à dire la manière d'écrire le code :


let a = 1; // définition d'une variable

for (let i = 0; i < 10; i++){  // une boucle bornée
	a = a * 3;
}	
					

Le programme de 1ère NSI n'impose aucune maîtrise du langage JavaScript; si toutefois vous voulez en savoir plus sur ce langage, vous pouvez consulter cette page d'aide.

Intégration du JavaScript dans une page web

Où mettre le code JS ?

Le JavaScript est, comme son nom l'indique, un langage de script ( donc non compilé ) comme Python. Il est exécuté par le navigateur lui-même ( donc "côté client" ), pas besoin de programme annexe.
Les scripts s'écrivent dans un fichier d'extension .js, que l'on lie à la page web à laquelle il est destiné avec une instruction placée dans le fichier HTML :


	<script type="text/javascript" src="script.js"></script>
			

On peut placer cette instruction où l'on veut dans le code HTML, mais pour éviter certains problèmes, il est préférable de la mettre à la fin, juste avant la balise fermante </body>.

Une fois "lié" à la page, on dispose de toutes les instructions écrites dans le script.

Exceptionnellement, certaines pages peuvent intégrer des "bouts" de code JS directement dans le fichier .html; c'est une pratique à éviter cependant...

Développement en JavaScript

Pour coder en JavaScript, un simple éditeur de texte suffit ( vous utiliserez là-aussi Bluefish ).

Par contre, le débogage est moins évident : il faudra aller consulter les messages d'erreur directement dans la console du navigateur.
Pour la faire apparaître, faites CTRL + MAJ + K dans la page du navigateur exécutant le script :

Console Firefox

Exécution du code JavaScript

Les évènements

La programmation JS est du type événementielle, c'est à dire que le code ne s’exécute que si certains évènements se produisent :

Vous trouverez ici la ( longue ) liste des évènements à laquelle un site peut répondre.

Lorsqu'un évènement se produit, une fonction du code JS est alors automatiquement exécutée. Cette fonction est appelée gestionnaire d'évènement.

Voila un exemple classique de bouton sur lequel un utilisateur peut cliquer dans une page :

Vous pouvez examiner le code JS du gestionnaire d'évènement qui gère ce bouton : il est ici intégré directement dans le fichier HTML; afficher le code source de ce dernier, et repérer où est situé le code JS.


let btn = document.querySelector("div[class='travail'] button"); // sélection du bouton 

function affiche(){ // gestionnaire d'évènement

	alert('Y a encore du boulot...');

}

btn.addEventListener('click', affiche); // placement d'un écouteur sur le bouton
		

Association d'un évènement à un élément d'une page web

Pour appeler la fonction gestionnaire d'évènement, il faut que l'utilisateur puisse interagir avec la page : on peut donc attribuer à des éléments de la page le rôle de "déclencheur" d’évènement.
N'importe quel élément HTML peut servir de "déclencheur" : bouton bien sûr, mais aussi paragraphe, titre, cellule de tableau, etc...

L'association d'un évènement à un élément donné se fait en deux temps :

Sélection d'un élément de la page

Le code JS doit pouvoir sélectionner l'élément HTML avec lequel il va interagir, c'est à dire le manipuler ou en recevoir des informations, voire en créer un nouveau.

Voila par exemple l'instruction qui permet la sélection de l'élément de type button dans l'exemple ci-dessus :


let btn = document.querySelector("div[class='travail'] button");
				

Outre cette méthode de sélection par sélecteur CSS ( qui est une des plus puissantes ), il en existe d'autres :

Méthode Rôle
document.getElementsByClassName(nom_de_classe)
sélectionne la liste des éléments ayant le nom de classe donné.
document.getElementsByTagName(nom_de_balise)
sélectionne la liste des éléments ayant le nom de balise HTML donné.
document.getElementById(id)
sélectionne l'élément identifié selon son id.
document.querySelector(sélecteur)
sélectionne LE PREMIER élément, dans l'ordre du document, qui correspond au sélecteur CSS spécifié.
document.querySelectorAll(sélecteur)
sélectionne la liste de TOUS les éléments éléments inclus dans le document qui correspondent au sélecteur CSS spécifié ( les éléments sélectionnés sont stockés dans un tableau ).

( Attention à la syntaxe Camel-case du JavaScript, au pluriel, au singulier,...)

Attention, la sélection d'un élément ne concerne pas que l'élément lui-même mais également son contenu, où plutôt tout ses éléments enfants.

Par exemple, l'instruction :


	document.getElementById('mon_texte');
					

...appliquée au code HTML :


	<p id="mon_texte">Attention, la sélection d'un élément ne concerne pas que lui mais <strong><em>tout ses éléments enfants</em></strong>.</p>
					

...sélectionnera le texte, mais également les éléments <strong> et <em> !

Association à un gestionnaire d'évènement

Pour associer ensuite un gestionnaire d'évènement à un élément sélectionné, il faut placer un écouteur ( listener ) sur l'évènement en question.

Pour associer au clic sur le bouton précédemment sélectionné le gestionnaire d'évènement qui affiche la fenêtre "pop-up" ( fonction affiche() ), on trouve ainsi l'instruction :


	btn.addEventListener('click', affiche);
				

Attention, le nom du gestionnaire d'évènements dans l'instruction précédente est à mettre sans les parenthèses, sinon cette instruction appelle la fonction au lieu de l'associer à l'évènement !

Mon premier évènement...

Voila un petit travail : vous allez donner la possibilité à l'utilisateur qui consulte une page que vous allez écrire, de connaître, à sa demande, la date du jour et l'heure qu'il est ( ça peut toujours servir...).
L'heure lui sera donnée lorsqu'il cliquera sur un bouton en bas de la page.

Affichage date et heure

Travail à faire

  1. créer un nouveau fichier .html contenant la structure "de base" d'une page web ( voir chapitres précédents ).
  2. placer dans cette page un bouton sur lequel l'utilisateur pourra cliquer ( voir exemple ci-dessus ).
  3. Écrire dans un fichier .js, à part du fichier .html , mais dans le même répertoire, le gestionnaire d'évènement permettant l'affichage du jour et de l'heure à l'aide d'une fenêtre pop-up.
    Pour déterminer la date et le jour, utiliser la fonction JS suivante :
  4. 
    	let aujourdhui = new Date(); // la variable aujourdhui contient la date et l'heure actuelles
    			
  5. écrire l'instruction qui place un écouteur sur le bouton de la page pour le gestionnaire d'évènement écrit à la question précédente.
  6. Lier votre script JS à la page HTML, recharger celle-ci dans le navigateur, et tester votre code !

Améliorations

Le format d'affichage de la date et de l'heure n'est pas très joli...Si vous voulez améliorer votre code, voila les méthodes qui permettent de récupérer individuellement les différentes informations temporelles :


	aujourdhui.getFullYear()	// année sous la forme XXXX
	aujourdhui.getMonth()		// Mois 0-11 	0 = Janvier
	aujourdhui.getDate()		// Date 1-31 	
	aujourdhui.getDay()			// Jour 0-6 	0 = Dimanche
	aujourdhui.getHours()		// Heure 0-23 	0 = minuit
	aujourdhui.getMinutes()		// Minutes 0-59 	
	aujourdhui.getSeconds()		// Secondes 0-59
			

On pourra utiliser avec profit les deux tableaux suivants :


	let jours = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'];
	let mois = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
			
Affichage date amélioré

Lien vers les RÉPONSES

D'autres interactions

Vous avez maintenant les bases de l'interaction entre HTML/CSS et JavaScript.

Vous vous dites à présent qu'afficher des petites fenêtres pop-up, c'est bien gentil, mais il doit y avoir plus intéressant comme interaction ( d'autant plus que c'est une pratique peu appréciée, donc à éviter...)

C'est ce que vous allez expérimenter, en travaillant maintenant sur ces exemples.

Vous écrirez le code JS pour que votre page propose une des interactions décrites ci-dessous lorsque l'utilisateur clique sur un des boutons dans la page ( les écouteurs sont déjà placés ).

Dans tous ces exemples, elmt représente la variable associée au (ou aux) élément(s) qui aura (auront) été précédemment sélectionné(s).

Modifier une propriété de style d'un élément

On peut, grâce à JS, modifier dynamiquement les propriétés d'un élément ( couleur, couleur de fond, taille de caractère,...).

Pour cela, la syntaxe est :


	elmt.style.propriété = "attribut";
			

Les valeurs à utiliser pour la règle de style ( propriété et attribut ) sont exactement les mêmes que celle utilisées dans les feuilles CSS ( voir le cours précédent au besoin. )

A vous d'écrire le code des gestionnaires d'évènements pour :

  • augmenter la taille de la police de caractères utilisée pour les titres de niveau h2
  • mettre en rouge le texte des paragraphes ( et pas les titres ! ) de la deuxième section uniquement (id t2)
  • changer la couleur de fond de la page

On rappelle que les règles de style fonctionnent "en cascade", c'est à dire que les enfants "héritent" des propriétés de style de leur parent.

D'autre part, ne pas oublier que la sélection de plusieurs éléments se fait sous forme d'un tableau, qu'il faudra parcourir pour sélectionner chacun des éléments.

Modifier le contenu d'un élément

C'est à dire changer le texte compris entre deux balises HTML.

Pour cela, la syntaxe est :


elmt.innerHTML = "bla bla bla";
			

Écrivez le gestionnaire d'évènement pour modifier le texte du paragraphe ayant l'id mod ( y mettre quelque chose de plus intéressant...)

Créer un nouvel élément

C'est à dire, insérer un élément dans la page. Cela se fait en plusieurs temps; voila l'exemple sur un nouveau titre de niveau 3 :

  1. Création de l'élément :
  2. 
    nvl_elmt = document.createElement('h3');
    				
  3. Modification de son contenu :
  4. 
    nvl_elmt.innerHTML ="Je suis un petit nouveau ;-)";
    				
  5. Ajout de l'élément dans la page :
  6. Plusieurs méthodes existent pour cela, mais nous n'utiliserons que celle qui permet d'ajouter le nouvel élément en tant que dernier enfant d'un autre élément :

    
    parent.appendChild(nvl_elmt);
    				

    parent désignant bien entendu la variable faisant référence à l'élément parent, précédemment sélectionné.

A vous d'utiliser cela pour créer un nouveau paragraphe à la fin de la section t1 ( et bien sûr, d'y mettre un contenu si possible intéressant...)

Lien vers les RÉPONSES