Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Une application HTML5 est en fait une page web avec surtout du HTML mais aussi du CSS et du JavaScript.
Gros avantage : elle est multiplateformes ; fonctionne avec sur n'importe quel terminal doté d'un navigateur.
Il faut bien sûr utiliser du HTML5, du CSS3 et du JS moderne.
Pour créer des graphiques web il est conseillé d'utiliser en plus l'API Canvas ou le format SVG.
Mon tuto sur Canvas
Mon tuto sur le format SVG
Je désigne par cette expression un composeur de couleurs très utile pour un développeur web.
Via une interface graphique l'utilisateur compose une couleur (intensités de Rouge,Vert et bleu et degré de transparence)
et en retour l'application affiche le code RGBA de la couleur retenue ainsi qu'une boite ayant en couleur de fond cette couleur.
Compte tenu du "step" de 5 dans chaque curseur, il y a 132 650 couleurs possibles (51 * 51 *51) sans tenir compte de l'apha ...
Le développeur web, utilisateur de cette application, peut ensuite insérer le code RGBA de la couleur retenue dans
les règles de style relatives aux couleurs.
Ajoutez cette page à vos favoris !
Pour saisir les quatre paramètres d'un code RGBA emploi de quatre input type = range.
Ce nouveau type de champ de saisie est implémenté sur tous les navigateurs récents.
Notez aussi l'emploi de balises output qui remplacent avantageusement des "input type ='text' readonly ... ".
Ce nouveau type d'élément de formulaire est reconnu par les navigateurs récents.
Un input type = "text" en lecture seule affiche le code RGBA découlant de la composition des quatre curseurs.
Une boite DIV a pour couleur de fond celle découlant de la composition faite par l'utilisateur.
Aucun "scorie" de JS dans le code de la partie BODY.
f1.oninput =function()
{
let rouge = f1.rouge.value ;
let vert = f1.vert.value;
let bleu = f1.bleu.value;
let alpha = f1.alpha.value;
let couleur = 'rgba(' + rouge + ',' + vert + ',' + bleu +','+ alpha + ')';
f1.rouge2.value = f1.rouge.value;
f1.vert2.value = f1.vert.value;
f1.bleu2.value = f1.bleu.value;
f1.alpha2.value = f1.alpha.value;
document.getElementById('rendu').style.background = couleur ;
f1.code.value = couleur ;
}
Notez la façon classique (mais toujours valide) de nommer les champs dans le script : nomFormulaire.nomChamp
J'ai utilisé l'événement récent de formulaire : "input" qui remplace avantageusement les événements "change" qui devaient être associés à chaque champ de saisie.
Ajoutez cette page à vos favoris !
Je ne reprends pas le code CSS car il est identique à la première application.
J'utilise des champs de type number pour saisir les opérandes.
Ce nouveau type de champ est implémenté sur tous les navigateurs récents.
Attention pour pouvoir saisir des nombres décimaux dans un champ de type number il faut que l'attribut step soit à "any"
sinon vous ne pouvez saisir que des entiers.
f1.oninput =function()
{
var premier = f1.premier.value;
var deuxieme =f1.deuxieme.value;
var operation = f1.operation.value;
if (operation =="+" )
var resultat = parseFloat(premier) + parseFloat(deuxieme);
if (operation =="-" )
var resultat = parseFloat(premier) - parseFloat(deuxieme);
if (operation =="*" )
var resultat = premier * deuxieme;
if (operation =="/" )
var resultat = premier / deuxieme;
if (operation =="p" )
var resultat = Math.pow(premier,deuxieme) ;
f1.resultat.value = resultat ;
}
Je rappelle que toute saisie dans un champ est de type string même s'il s'agit d'une suite de chiffres.
En JavaScript le signe + est ambigu et désigne une concaténation s'il s'agit de chaines.
Donc pour obtenir une addition il faut au préalable convertir en décimal.
Pour les autres opérations la conversion est automatique en JS ;
ce n'est pas le cas dans tous les langages ...
Encore une fois le traitement est en temps réel grâce à l'événement de formulaire input qui se déclenche à chaque modification
dans un champ de saisie du formulaire (input ou textarea).
Je vous propose un patchwork dynamique pour le plaisir des yeux.
CSS :img:active {transform : scale(3) ; z-index : 100;} : L'image courante est agrandie sur clic.
HTML :...button onclick ="clearInterval(routine);this.remove();" ...: : mettre fin à l'appel de la fonction "ajout()".
function ajout()
{
var x ; var y;
x = Math.floor(Math.random()*90);
y =Math.floor(Math.random()*300);
x = x +"%";
y= y+"px";
var patchwork =document.querySelector("#patchwork");
var image = document. createElement("img");
var reel = Math.random() ;
var entier = Math.ceil(reel*36) ;
switch(entier)
{
case 1 : image.src ="..//images/bikini.jpg" ; break;
case 2 : image.src ="../images/bikini1.jpg" ; break;
case 3 : image.src ="../Images/bikini2.jpg" ; break;
case 4 : image.src ="../images/bikini3.jpg" ; break;
...
case 35 : image.src ="../images/bikini33.jpg" ; break;
case 36: image.src ="../images/bikini34.jpg" ; break;
} // fin switch
image.style.left =x;
image.style.top = y;
patchwork.appendChild(image);
} // fin fonction ajout
var routine = setInterval(ajout,1000);
var routine = setInterval(ajout,1000) : appel chaque seconde de la fonction "ajout".
Pour bénéficier d'un vrai repère cartésien j'utilise l'API Canvas (API de la spécification HTML5).
La balise canvas crée une repère cartésien dans la page web.
var canvas = document.querySelector("canvas");
var ctx = canvas.getContext("2d");
var X = canvas.width;
var Y = canvas.height;
var stop;
var balle =
{
x: X/2,
y: 20,
vx: 3,
vy: 4,
rayon: 15,
dessin: function ()
{
ctx.beginPath();
ctx.arc(this.x, this.y, this.rayon, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();
},
}; // fin définition objet balle
var raquette =
{
x: X/2,
y: Y-15,
vx: 15,
w: 70,
h:10,
dessin: function ()
{
ctx.fillStyle = 'navy';
ctx.fillRect(this.x,this.y, this.w, this.h);
},
}; // fin définition objet raquette
balle.dessin();
raquette.dessin();
canvas.onclick =function()
{
stop = setInterval(boucle_jeu,50);
var compteur =0;
function boucle_jeu()
{
ctx.clearRect(0,0,X,Y);
compteur++;
balle.dessin();
raquette.dessin();
// changer coordonnées balle
balle.x +=balle.vx;
balle.y +=balle.vy;
// gestion des rebonds
if(balle.x > X-15 || balle.x <= 15) {balle.vx = -balle.vx}
if (balle.y < 15) {balle.vy = -balle.vy;}
// Si balle atteint le bas
if (balle.y > Y - 15)
{
if (balle.x > raquette.x && balle.x < raquette.x + raquette.w)
{balle.vy = -balle.vy;} // balle interceptée par raquette donc rebond
else // balle non interceptée par raquette
{
alert('perdu ; nombre de points : ' + Math.round(compteur/10));
balle.x = X/2 ;balle.y = 20 ;raquette.x =X/2;
ctx.clearRect(0,0,X,Y);
balle.dessin(); raquette.dessin();
clearInterval(stop);
}
} // fin si externe
// gestion clavier
document.onkeydown = function(e)
{
if (e.keyCode == 37) {raquette.x -=raquette.vx; }
if (e.keyCode == 39) {raquette.x += raquette.vx; }
}
} // fin boucle_jeu
}
Ce script est orienté objet.
Les objets sont définis sans passer par une classe mais avec un syntaxe proche de la notation JSON.
Canvas et SVG sont deux technologies utilisées pour créer des graphiques web, mais elles ont chacune des spécifictés.
Je vous propose un jeu dont le but est d'intercepter le plus rapidement possible le carré rouge avec le carré vert.