Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
L'emploi d'un script dans une page web peut apporter une plus-value à celle-ci.
Un script de quelques lignes mais comportant des boucles peut produire beaucoup de code HTML.
Je n'en dit pas plus dans cet article car je consacre tout un chapitre sur ce sujet.
Générer du HTML via un script
À saisir dans la console :
> flottant = Math.random() 0.7108295069183412 > entier = Math.floor(flottant*10) 7
Il faut utiliser la méthode floor() afin que l'entier généré soit compris entre 0 et 9.
En effet floor() arrondit à l'entier inférieur.
L'entier généré de façon aléatoire doit être compris entre 1 et 6.
flottant = Math.random() 0.5338635313763636 de = Math.ceil(flottant * 6) 4
Il faut utiliser la méthode ceil() afin que l'entier généré soit compris entre 1 et 6.
En effet ceil() arrondit à l'entier supérieur.
Dans l'exemple le code JS est mélangé avec le code HTML.
On dit que l'on utilise le gestionnaire d'événements HTML.
Ici cette solution est acceptable car il n'est associé à chaque élément qu'une instruction JS.
Comme l'effacement porte sur l'élément HTML courant (celui qui porte l'évènement) on peut employer le mot clé "this".
Pour effacer les différentes images j'ai utilisé 4 techniques différentes.
La différence majeure entre display:none et visibility:hidden est que le premier supprime entièrement un élément
de la mise en page tandis que le second cache l'élément mais réserve la place qu'il occupait.
width=0 a le même effet que display:none tandis que opacity =0 a le même impact que visibility : hidden.
Supprimez les images de la première rangée ; notez que le trait (balise HR) remonte.
Effacer les images de la deuxième rangée ; remarquez que le trait ne bouge pas ...
// instant présent
var aujourdhui = new Date();
// affichage date courante
var annee = aujourdhui.getFullYear();
var mois =aujourdhui.getMonth()+1;
var jour = aujourdhui.getDate();
var joursemaine = aujourdhui.getDay() ;
var tab_jour =
new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
document.write('Nous sommes le : ' + tab_jour[joursemaine]
+ ' ' + jour + '/' + mois + '/' + annee) ;
// affichage de l'heure courante avec actualisation chaque seconde
var boite = document.querySelector('#heure'); // référence le DIV dans le script
function horloge()
{
var heure =new Date();
boite.textContent =
"il est : " + heure.getHours()+" heures "+ heure.getMinutes()
+" minutes "+ heure.getSeconds() + " secondes"
}
var fin = setInterval("horloge()", 1000);
// la méthode setInterval() retourne un entier qui ici est récupéré dans la variable "fin".
Le constructeur new Date() sans argument retourne l'instant présent.
J'ai utilisé un tableau pour associer à 0 la chaine "dimanche", à 1 la chaine "lundi", etc.
La fonction "horloge()" est appelée toutes les 1000 millisecondes (chaque seconde) via à la méthode setInterval(). La fonction "horloge" affiche l'instant présent dans une boite DIV.
Observez bien l'instruction var fin = setInterval("horloge()", 1000).
Ce qui signifie que la fonction "horloge" est appelée chaque seconde (1000 millisecondes).
Le rendu de ce code :
Dans un document HTML les images apparaissent sous forme de miniatures. Mais si clic sur une des miniatures, celle-ci est alors affichée en grand dans une boite avec la légende appropriée.
.miniature {display : inline-block ; height : 80px ;
width : auto ; margin : 5px; }
div {width : 500px ; height : 400px ;
margin : 10px auto;
background-image: url(../images/palourde_royale.jpg);
background-size : contain;
background-color : white;
background-repeat : no-repeat;}
Notez l'emploi de la propriété background-size : contain.
Ainsi l'image agrandie dans le DIV n'est jamais déformée.
Pour en savoir davantage sur les propriétés CSS préfixées "background"
Pour chaque image appel de la fonction "afficher" argumentée avec "this" ; mot clé qui désigne donc ici l'image objet du clic.
var boite = document.querySelector('div');
var legende =document.querySelector('h4');
function afficher(image)
{
var source = image.getAttribute('src');
// on récupère le chemin de l'image sélectionnée
source = "url(" + source +")" ;
// on produit la valeur de la propriété background-image
boite.style.backgroundImage =source ;
// on modifie la propriété backgroundImage de boite
// on récupère la valeur de l'attribut alt de l'image sélectionnée
var texte = image.getAttribute('alt');
// on change la légende
legende.textContent = texte;
}
Notez l'emploi de la méthode élément.getAttribute() pour modifier les attributs de l'élément DIV.
Attention en JS les propriétés CSS sont écrites selon la notation "camelCase" : suppression du tiret qui est remplacé
par une lettre majuscule. Ainsi "background-image" devient "backgrounImage" dans le script.
Si vous voulez un diaporama avec 6 images, il suffit d'ajouter un élément IMG dans le code HTML.
Il n'y a rien à changer dans le script !
L'utilisation du gestionnaire d'évéments HTML j'avère ici un choix judicieux.
Si j'avais utilisé le gestionnaire d'évènéments JS, l'ajout d'une nouvelle miniature obligerait à modifier à chaque fois le
script.
Ces trois barres horizontales sont omniprésentes : jeux vidéo, applications, sites internet, logiciel, etc.
Lorsque vous les voyez, vous savez immédiatement qu’il s’agit d’un bouton vous donnant accès à un menu.
Sur un petit écran les pixels sont précieux. le menu "hamburger" est une bonne solution pour ce type de terminal.
Donc par défaut un menu est masqué.
Si clic sur l'icône 'hamburger' alors le menu s'affiche.
Nouveau clic sur l'image 'hamburger' et alors le menu disparait.
J'ai récupéré l'image 'hamburger_icone.png' sur la 'toile'. Il suffit de taper 'hamburger' dans le moteur de recherche puis de cliquer sur l'onglet 'images'. J'ai ensuite redimensionné l'image avec PAINT car elle était trop lourde.
Notez dans la balise IMG l'attribut "onclick" qui permet d'appeler une fonction JS.
L'icône est stylé via la classe 'hamburger' : voir feuille de style ci-dessous.
Il consiste en une fonction nommée "mafonction".
function mafonction()
{
var menu = document.querySelector('nav');
if (menu.style.display == "block") {menu.style.display = "none"; }
else {menu.style.display = "block"; }
}
La variable "menu" référence l'élément NAV.
Si la boite NAV est affichée alors la fonction masque NAV.
Si la boite NAV est masquée alors la fonction affiche NAV.
/* Styler le menu de navigation */
nav {background : navy ; position: relative; z-index :1;}
/* Masquer le menu de navigation */
nav {display: none;}
/* Styler les liens du menu */
nav a {display: block; color: skyblue; height : 50px ;
line-height : 50px ; padding-left : 40px;
text-decoration: none; font-size: 15px; }
/* Styler l'icone hamburger */
img.hamburger {position : absolute ; right: 0px ;
top : 0px; width : 40px; z-index : 9; }
/* Styler le lien survolé */
nav a:hover { background-color: skyblue ; color: navy; }
La boite NAV a une valeur pour la propriété z-index inférieure à celle affectée à l'icône ;
ainsi ce dernier est toujours en premier plan.
Par défaut la boite NAV est masquée.
Les liens contenus dans NAV sont de type block, couleur de la légende : skyblue, pas de soulignement, etc.
L'cône est positionné en haut à droite de l'écran.
Sur survol d'un lien les couleurs de fonds et de texte sont inversées.
Vous cliquerez sur le "hamburger" pour afficher le menu.
Vous cliquerez de nouveau sur cet icône pour le masquer.
Thématique : dans une page une partie de l'article rédactionnel est masqué par défaut, seul le premier paragraphe ("l'accroche") apparait. Mais en cliquant sur un lien la partie masquée s'affiche !
La boite DIV est identifiée "suite".
Si clic sur la balise A provoque l'exécution de la fonction JS "afficher_suite".
div#suite{display : none; }
Par défaut la boite identifiée "suite" est masquée.
function afficherSuite()
{
document.getElementById('suite').style.display ='block';
}
La fonction démasque l'élément identifié "suite".
La solution HTML5 consiste à utiliser les éléments details & summary.
Autres nouvelles balises HTML5
Quand vous télécharger ce framework vous récupérez un fichier qui pèse 0 octet ...
Donc Vanilla.js c'est une plaisanterie ; utiliser "vanilla" signifie en fait :
programmer en JS natif (sans une couche de framework).
Les auteurs de cette blague reprochent aux frameworks JS, tel jQuery, un ralentissement certain dans l'interprétation du code.
Il font à juste titre remarquer que le JS natif a tellement progressé que le recours aux frameworks JS est souvent inutile.
Un “fondu” est une disparition OU apparition progressive d’un élément. C’est donc un effet de transition d’un état à un autre.
jQuery propose des méthodes pour faire apparaitre / disparaitre progressivement une collection d'éléments :
fadeIn,() fadeOut(), fadeToggle().
Mais si vous combinez des nouveautés proposées par la dernière version de JavaScript et celles proposées par CSS version 3, vous pouvez éviter l'emploi de jQuery.
Je charge la librairie "ASCIIMathML.js".
Deux élements BR contiennent des "template strings".
Ces littéraux de gabarit contiennent des formules mathématiques avec une syntaxe peu satisfaisante.
Le script :
var nom ="Dupont" ;
var prenom ="Marcel";
var age = 50;
var identite = "Nom : " + nom + " - prénom : " + prenom + " - âge : " + age ;
document.write(identite);
var identite2 = `Nom : ${nom} - prénom : ${prenom} - âge : ${age} `;
document.write('
');
document.write(identite2);
Je vous montre que plutôt que concaténer des variables avec des chaines, il est plus élégant d'englober ces variables dans une chaine délimitée par des ` (accents graves) ; il faut utiliser la notation "moustache" pour les variables.
Deux jolies formules mathématiques apparaissent à la place des deux "template strings" contenues dans les balises BR.
Le code HTML :
Le script :
// Deviner un entier généré de façon aléatoire
function jeu()
{
var infos = document.getElementById('infos');
var contenu ="";
var flottant = Math.random();
// entier généré compris entre 1 et 99
var nombre_secret = Math.floor(flottant*100);
console.log(nombre_secret); // instruction provisoire
var i =1 ;
var compteur = 0;
while (i==1) // boucle infinie
{
var nombre_propose = prompt("saisir un entier compris entre 1 et 99");
nombre_propose = parseInt(nombre_propose);
compteur++;
if (nombre_secret == nombre_propose)
{
contenu = `Vous avez trouvé le nombre secret qui était : ${nombre_secret} `;
alert(contenu);
break;
}
else if (nombre_propose < nombre_secret)
{contenu = "Trop petit ! "; alert(contenu); }
else
{contenu ="Trop grand !"; alert(contenu); }
} // fin boucle
infos.innerHTML =`Vous avez trouvé en : ${compteur} essais ` ;
} // fin fonction
Notez l'utilisation des "template strings".
Remarquez la boucle infini (la condition est toujours vrai).
Le rendu dans un nouvel onglet afin que vous puissiez afficher la console du navigateur. Cliquez ici !
L'interface HTML "Drag and Drop" (pour glisser-déposer) permet à des applications d'utiliser des fonctionnalités de glisser-déposer
dans le navigateur.
Cette API fait l'objet de tout un chapitre dans le tuto HTML5
Je veux simuler le téléchargement d'un gros fichier avec affichage de la progression du chargement dans un élément progress
Le script s'exécute beaucoup trop vite ; en une fraction de seconde.
Le langage Python dispose de la fonction sleep(n secondes) qui peut être intégrée dans une boucle pour augmenter
le temps d'exécution d'un programme.
JavaScript ne propose pas de fonction équivalente mais il existe les minuteurs : fonctions setInterval() & setTimeout().
La durée d'exécution est cette fois de 20 secondes !
var stop = setInterval(increment,200) : la fonction increment est appelée tous les 200 millisecondes.
Cette fonction est appelée 100 fois (l'appel est ensuite bloqué par clearInterval()).
Donc 100 par 200 millisecondes = 20 secondes.
L'instruction console.log(compteur) est provisoire.
Vous verrez à cette occasion une utilisation étonnante des classes CSS ...
Toutes ces astuces sur JS et les formulaires sont traitées dans un autre chapitre du même tuto.
Je vous invite à suivre le lien suivant : JS et les formulaires