Vous allez créer une page html, un fichier css et un fichier js.
Ce dernier va permettre d'ajouter de l'interactivité à votre page html.
ISN/Interraction_Hommes_Machines/JavaScript/
test1.html
alert
en console.log
.js/second.js
est l'adresse relative au fichier second.htmlISN/Interraction_Hommes_Machines/JavaScript/js/
age = parseInt(age);
En vous inspirant du dernier exemple, créez un fichier html et un fichier JavaScript.
A l'ouverture du fichier html, une fenêtre demandera la largeur d'un rectanle, puis une autre demandera la longueur d'un rectangle.
Puis la page affichera dans une fenêtre l'aire du rectangle.
Vous avez réussi ? Passez à la suite !
Nous allons nous intéresser à la manipulation des codes html et css via le JavaScript.
Le Javascript va modifier les pages html et css en accédant aux éléments cible du DOM. (voir aussi le cours précédent )
L'accès aux éléments html peut se faire via 4 méthodes :
Mise en pratique :
interraction.html
et saisissez le code ci-dessous :<button onclick="change_couleur()">Cliquez ici !</button>
change_couleur()
interraction.js
) qui va être créé par ce qui suit ...interraction.js
dans le sous-dossier js.Ouvrez la console des outils de développement web.
Vous devez constater que la variable paragraphe
contient maintenant la balise paragraphe et son contenu.
Dans la variable paragraphe, l'élément d'ID (identifiant) "important" est stocké.
Ajoutez le code ci-dessous au fichier Js.
Appuyez sur le bouton et constatez le changement.
Essayons de faire le changement plus proprement avec le css
Puis ajoutez la ligne suivante dans le html pour lier le css avec votre fichier html.
<link rel="stylesheet" href="css/interraction.css">
Et enfin modifiez le js comme ce qui suit :
function change_couleur() {
var paragraphe = document.getElementById("important");
console.log(paragraphe);
paragraphe.classList.add("rouge");
}
Ce code aura pour effet d'ajouter la classe "rouge" à notre élément "paragraphe" sélectionné.
Ajoutez le bouton suivant dans le html :
<button onclick="reset_couleur()">Reset</button>
Puis ajoutez la fonction suivante dans le Js :
function reset_couleur() {
var paragraphe = document.getElementById("important");
console.log(paragraphe);
paragraphe.classList.remove("rouge");
}
Testez le résultat !
Ajoutez un bouton supplémentaire qui changera paragraphe de la façon suivante :
Pensez à modifier le code du bouton reset pourqu'il fonctionne encore !
Le principe de sélection d'un querySelector est le suivant, on donne en paramètre un seul argument : une chaîne de caractère qui doit être un sélecteur CSS.
Par exemple si dans votre fichier css vous avez :
alors vos paragraphes d'identifiant menu et de classe item seront en rouge. (voir le cours sur le css)
Il y a deux méthodes pour les querySelector .
Nous allons tester ces deux méthodes avec le fichier suivant : Fichier HTML
Enregistrez le fichier : (clic droit / enregistrez sous ) dans le dossier NSI/Interraction_Hommes_Machines/JavaScript/
Dans le sous-dossier js créez un fichier query.js
que vous allez compléter comme qui suit :
Dans ce code :
query
contient le premier élément de la page html dont le sélecteur css est nav ul li
Ouvrez la page HTML dans Firefox, puis ouvrez la console du développeur ( CTRL + MAJ + i )
Observez l'élément obtenu, vous pouvez dérouler le contenu de cet élément en appuyant sur le petit triangle à gauche de son nom.
Passons à querySelectorAll(), ajoutez les lignes suivantes dans le fichier query.js
Cette fois dans la variable queryAll_1 , il y aura tous les éléments dont le sélecteur CSS est ".menu li", c'est à dire les items de listes dont la classe est "menu".
Ouvrez le fichier HTML dans un navigateur et ouvrez la console du développeur ( CTRL + MAJ + i ).
Vous constatez qu'il y a TROIS éléments, ils sont stockés dans un tableau.
Pour afficher les éléments de façon individuelle dans un tableau, cela se passe comme en python.
queryAll_1[0] affichera le 1er élément du tableau.
Ajoutez les lignes suivantes dans votre fichier js.
Les trois éléments sélectionnés seront affichés. Mais s’il y en a plus, cette méthode sera fastidieuse.
Utilisons une boucle pour afficher ces éléments un à un.
Pour ce faire, nous allons sélectionner tous les éléments "li" enfants de balise <nav>.
Un sélecteur valide est : nav li. Ajoutez les lignes suivantes dans le fichier js.
Vous allez trouver 6 éléments. Affichons-les dans la console de façon individuelle avec une boucle (voir cours js écrit avec le diaporama)
Ce type de boucle sera pratique pour modifier chaque élément sélectionner avec un querySelectorAll.
Nous sommes maintenant capables de sélectionner divers éléments HTML, mais il serait pratique de modifier leur contenu. Par exemple, modifier ou ajouter du texte dans un paragraphe.
Pour cela la méthode innerHTML
va nous servir. Ajoutez les lignes suivantes à votre fichier JS.
la variable important contient l'élément HTML dont l'ID est "important". Pour accéder à son contenu textuel, il faut utiliser la méthode innerHTML
.
La syntaxe est la suivante : objet.méthode donc ici important.innerHTML est le contenu textuel de l' "objet " important.
Il est possible de changer ce texte
Avec la première ligne de code, la variable important.innerHTML reçoit un nouveau texte entre guillemets. Il est possible d'y placer des balises html.
Dans la dernière ligne de code, comme en python, += permet d'ajouter du contenu à la variable. (cela reviendrais à écrire : important.innerHTML = important.innerHTML + "<br> Cette citation date de 1951"; )
Ajouter du code dans le fichier js pour que :
Les événements permettent de déclencher une fonction selon qu'une action s'est produite ou non. Par exemple, faire apparaître une fenêtre alert() lorsque l'utilisateur survole une zone d'une page web, ou ajouter un élément lors d'un clic de bouton de la souris (ou du clavier).
Nom de l'événement |
Action pour le déclencher |
---|---|
|
Cliquer (appuyer puis relâcher) sur l'élément |
|
Double-cliquer sur l'élément |
|
Faire entrer le curseur sur l'élément |
|
Faire sortir le curseur de l'élément |
|
Appuyer (sans relâcher) sur le bouton gauche de la souris sur l'élément |
|
Relâcher le bouton gauche de la souris sur l'élément |
|
Faire déplacer le curseur sur l'élément |
|
Appuyer (sans relâcher) sur une touche de clavier sur l'élément |
|
Relâcher une touche de clavier sur l'élément |
|
Frapper (appuyer puis relâcher) une touche de clavier sur l'élément |
|
« Cibler » l'élément |
|
Annuler le « ciblage » de l'élément |
|
Changer la valeur d'un élément spécifique aux formulaires ( |
|
Taper un caractère dans un champ de texte (son support n'est pas complet sur tous les navigateurs) |
|
Sélectionner le contenu d'un champ de texte ( |
Commençons par un évènement déjà rencontré, le clic !
Toujours dans le même dossier, créez un fichier HTML nommé : evenements.html
Écrivez à l'intérieur :
Puis visualisez ce fichier dans Firefox.
Un attribut de la balise <span> est onclic, ce qui signifie que la fonction alert(..) ne sera déclanchée que lors d'un clic sur cet élément span (une sorte de boîte inline)
Voici un autre exemple avec le focus.
Ajoutez les lignes suivantes dans le fichier HTML :
Le mot clé this permet de pointer sur l'objet qui a déclenché l'évènement.
onfocus : se déclenchera si le "focus" est pris par la balise input.
onblur : se déclenchera si le "focus" est perdu par la balise input.
Testez dans le navigateur !
Il est recommandé de ne pas mettre les fonctions javascript dans les balises html. Nous allons les séparer dans la suite de ce TP.
Fabriquons un bouton interactif :
Dans le HTML, ajoutez les lignes suivantes :
et juste avant la balise fermante HTML, ajoutez la ligne suivante :
Puis créez un fichier evenements.js dans le sous-dossier js. Dans celui-ci ajoutez :
et testez dans votre navigateur.
Cette dernière méthode n'est pas la plus récente, il est recommandé maintenant d'utiliser des eventListener() , c’est-à-dire des méthodes qui vont surveiller l'apparition d'évènements.
À la place des dernières lignes de codes du fichier JS, utilisez les lignes suivantes :
Difficile : Faites un bouton qui change de couleur lors du passage de la souris.
Indice : setAttribute ...
<!DOCTYPE html>
<html>
<body>
<button id=
"clickIt"
>Cliquez ici !</button>
<p id=
"hoverPara"
>Passez la souris sur ce texte
!</p>
<b id=
"effect"
></b>
<script>
const x = document.getElementById(
"clickIt"
);
const y = document.getElementById(
"hoverPara"
);
x.addEventListener(
"click"
, RespondClick);
y.addEventListener(
"mouseover"
, RespondMouseOver);
y.addEventListener(
"mouseout"
, RespondMouseOut);
function
RespondMouseOver() {
document.getElementById(
"effect"
).innerHTML +=
"MouseOver Event"
+
"<br>"
;
}
function
RespondMouseOut() {
document.getElementById(
"effect"
).innerHTML +=
"MouseOut Event"
+
"<br>"
;
}
function
RespondClick() {
document.getElementById(
"effect"
).innerHTML +=
"Click Event"
+
"<br>"
;
}
</script>
</body>
</html>
Comme vous le voyez, il est possible d'ajouter plusieurs EventListener
à un même élément html.
Vous pouvez aussi associer une fonction à votre eventListener sans qu'elle soit intégrée dans les paramètre, cette fonction peut être définie par la suite (comme RespondMouseOut
)