SVT Le 1er Parrain
SVT Le 1er Parrain
SVT Le 1er Parrain
FICHE 19.
Les images
Body :
<body>
<a href="images/circuit_html.jpg" title="Afficher l'image originale"><img
src="images/circuit_html_min.jpg" alt="Miniature" /></a> <!-- on pourrait avoir
plusieurs images en portfolio -->
<div id="overlay"></div>
JavaScript
Script :
<script>
var links = document.getElementsByTagName('a'),
linksLen = links.length;
for (var i = 0 ; i < linksLen ; i++) {
links[i].onclick = function() { // Vous pouvez très bien utiliser le DOM-2
displayImg(this); // On appelle notre fonction pour afficher les images et
on lui passe le lien concerné
return false; // Et on bloque la redirection
};
}
function displayImg(link) {
var img = new Image(),
overlay = document.getElementById('overlay');
img.onload = function() {
overlay.innerHTML = '';
overlay.appendChild(img);
};
img.src = link.href;
overlay.style.display = 'block';
overlay.innerHTML = '<span>Chargement en cours...</span>';
}
document.getElementById('overlay').onclick = function() {
this.style.display = 'none';
};
</script>
</body>
</html>
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 20.
(nécessite un serveur)
AJAX & XMLHttpRequest
XML :
<?xml version="1.0" encoding="utf-8"?>
<table>
<line>
<cel>Ligne 1 - Colonne 1</cel><cel>Ligne 1 - Colonne 2</cel><cel>Ligne 1 - Colonne 3</cel>
</line>
<line>
<cel>Ligne 2 - Colonne 1</cel><cel>Ligne 2 - Colonne 2</cel><cel>Ligne 2 - Colonne 3</cel>
</line>
<line>
<cel>Ligne 3 - Colonne 1</cel><cel>Ligne 3 - Colonne 2</cel><cel>Ligne 3 - Colonne 3</cel>
</line>
</table>
Avec en entête : <?php header('Content-type: text/xml'); ?>
JSON :
{
Membre1: {
posts: 6230,
inscription: '22/08/2003'
},
Membre2 {
posts: 200,
inscription: '04/06/2011'
}
}
Avec JSON, on peut utiliser la méthode parse(), qui prend en paramètre la chaîne de
caractères à analyser et retourne le résultat sous forme d'objet JSON, la méthode stringify(),
qui permet de faire l'inverse (elle prend en paramètre un objet JSON et retourne son équivalent
sous forme de chaîne de caractères). Le JSON permet aussi d'envoyer des données
(json_encode() et json_decode() depuis PHP 5.2).
JavaScript
20.2. XMLHttpRequest
Avec :
xhr.open('GET', 'http://mon_site_web.com/ajax.php');
xhr.send(null);
Avec GET :
var value1 = encodeURIComponent(value1),
value2 = encodeURIComponent(value2);
xhr.open('GET', 'http://mon_site_web.com/ajax.php?param1=' + value1
+ '¶m2=' + value2);
Avec POST :
xhr.open('POST', 'http://mon_site_web.com/ajax.php');
xhr.setRequestHeader("Content-Type", "application/x-www-formurlencoded");
xhr.send('param1=' + value1 + '¶m2=' + value2);
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 21.
(nécessite un serveur)
AJAX : Upload via une frame
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 22.
(nécessite un serveur)
AJAX : Dynamix Script Loading (DSL)
Par exemple :
dans HTML :
<script>
function sendDSL() {
var scriptElement = document.createElement('script');
scriptElement.src = 'dsl_script.js';
document.body.appendChild(scriptElement);
}
function receiveMessage(message) {
alert(message);
}
</script>
<p><button type="button" onclick="sendDSL()">Exécuter le script</button></p>
et le fichier dsl_script.js :
receiveMessage('Ce message est envoyé par le serveur !');
Ou avec du PHP :
le fichier HTML :
<script>
function sendDSL() {
var scriptElement = document.createElement('script');
scriptElement.src = 'dsl_script.php?nick=' + prompt('Quel est votre
pseudo ?');
document.body.appendChild(scriptElement);
}
function receiveMessage(message) {
alert(message);
}
</script>
<p><button type="button" onclick="sendDSL()">Exécuter le script</button></p>
le fichier dsl_script.php :
<?php header("Content-type: text/javascript"); ?>
var string = 'Bonjour <?php echo $_GET['nick'] ?> !';
receiveMessage(string);
JavaScript
Ou encore avec JSON :
dans HTML :
<script>
function sendDSL() {
var scriptElement = document.createElement('script');
scriptElement.src = 'dsl_script_json.php';
document.body.appendChild(scriptElement);
}
function receiveMessage(json) {
var tree = '', nbItems, i;
for (node in json) {
tree += node + "\n";
nbItems = json[node].length;
for (i=0; i<nbItems; i++) {
tree += '\t' + json[node][i] + '\n';
}
}
alert(tree);
}
</script>
<p><button type="button" onclick="sendDSL()">Charger le JSON</button></p>
dans dsl_script_json.php :
<?php
header("Content-type: text/javascript");
echo 'var softwares = {
"Adobe": [
"Acrobat",
"Dreamweaver",
"Photoshop",
"Flash"
],
"Mozilla": [
"Firefox",
"Thunderbird",
"Lightning"
],
"Microsoft": [
"Office",
"Visual C# Express",
"Azure"
]
};';
?>
receiveMessage(softwares);
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 23.
(nécessite un serveur)
Exemple d'un système d'auto-complétion
(avec towns.txt)
Le fichier HTML :
<!DOCTYPE html> border: 1px solid #AAA;
<html> border-top-width: 0;
<head> background-color: #FFF;
<meta charset="utf-8" /> }
<title>TP : Un système d'auto- #results div {
complétion</title> width: 220px;
<style> padding: 2px 4px;
body { text-align: left;
margin: auto; border: 0;
padding-top: 80px; background-color: #FFF;
width: 300px; }
font-family: sans-serif; #results div:hover, .result_focus {
font-size: 0.8em; background-color: #DDD !important;
background-color: #F5F5F5; }
} </style>
input[type="submit"] { </head>
margin-left: 10px; <body>
width: 50px; height: 26px; <input id="search" type="text"
} autocomplete="off" />
#search { <div id="results"></div>
padding: 2px 4px; <script>
width: 220px; height: 22px; (function() {
border: 1px solid #AAA; var searchElement =
} document.getElementById('search'),
#search:hover, #search:focus { results =
document.getElementById('results'),
border-color: #777;
selectedResult = -1, // Permet de savoir
} quel résultat est sélectionné : -1 signifie «
#results { aucune sélection »
display: none; previousRequest, // On stocke notre
width: 228px; précédente requête dans cette variable
JavaScript
previousValue = searchElement.value;
// On fait de même avec la précédente
valeur
function getResults(keywords) { // searchElement.onkeyup = function(e) {
Effectue une requête et récupère les résultats
e = e || window.event; // On n'oublie pas
var xhr = new XMLHttpRequest(); la compatibilité pour IE
xhr.open('GET', './search.php?s='+ var divs =
encodeURIComponent(keywords)); results.getElementsByTagName('div');
xhr.onreadystatechange = function() { if (e.keyCode == 38 && selectedResult >
if (xhr.readyState == 4 && xhr.status == -1) { // Si la touche pressée est la flèche «
200) { haut »
displayResults(xhr.responseText); divs[selectedResult--].className = '';
} if (selectedResult > -1) { // Cette
}; condition évite une modification de
childNodes[-1], qui n'existe pas, bien entendu
xhr.send(null);
divs[selectedResult].className =
return xhr; 'result_focus';
} }
function displayResults(response) { }
// Affiche les résultats d'une requête else if (e.keyCode == 40 &&
results.style.display = response.length ? selectedResult < divs.length -
'block' : 'none'; 1) { // Si la touche pressée est la
// On cache le conteneur si on n'a pas de flèche « bas »
résultats results.style.display = 'block'; // On
if (response.length) { // On ne modifie affiche les résultats
les résultats que si on en a obtenu if (selectedResult > -1) { // Cette
response = response.split('|'); condition évite une modification de
var responseLen = response.length; childNodes[-1], qui n'existe pas, bien entendu
results.innerHTML = ''; // On vide les divs[selectedResult].className = '';
résultats }
for (var i = 0, div ; i < responseLen ; divs[++selectedResult].className =
i++) { 'result_focus';
div = }
results.appendChild(document.createElemen else if (e.keyCode == 13 &&
t('div')); selectedResult > -1) { // Si la touche pressée
div.innerHTML = response[i]; est « Entrée »
div.onclick = function() { chooseResult(divs[selectedResult]);
chooseResult(this); }
}; else if (searchElement.value !=
previousValue) { // Si le contenu du champ de
}
recherche a changé
}
previousValue = searchElement.value;
}
if (previousRequest &&
function chooseResult(result) { // previousRequest.readyState < 4) {
Choisit un des résultats d'une requête et gère
previousRequest.abort(); // Si on a
tout ce qui y est attaché
toujours une requête en cours, on l'arrête
searchElement.value = previousValue =
}
result.innerHTML; // On change le contenu du
champ de recherche et on enregistre en tant previousRequest =
que précédente valeur getResults(previousValue); // On stocke la
nouvelle requête
results.style.display = 'none'; // On
cache les résultats selectedResult = -1; // On remet la
sélection à zéro à chaque caractère écrit
result.className = ''; // On supprime
l'effet de focus }
selectedResult = -1; // On remet la };
sélection à zéro })();
searchElement.focus(); // Si le résultat </script>
a été choisi par le biais d'un clic, alors le </body>
focus est perdu, donc on le réattribue
</html>
}
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 24.
L'élément Canvas (1/2)
Avec <canvas>
On peut créer des rectangles, des arcs, context.moveTo(20, 20); // 1er point
mais aussi des chemins et courbes de Béziers : context.lineTo(130, 20); // 2e point
context.lineTo(130, 50); // 3e
<script>
context.lineTo(75, 130); // 4e
var canvas =
document.querySelector('#canvas'); context.lineTo(20, 50); // 5e
var context = context.closePath(); // On relie le
canvas.getContext('2d'); 5e au 1er
context.strokeStyle = "rgb(23, 145, context.stroke();
167)"; </script>
context.beginPath();
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 25.
L'élément Canvas (2/2)
Les extrémités des chemins peuvent être butt (par défaut, droites), round (arrondies)
ou square (avec un carré qui dépasse de chaque côté).
lineJoin permet de gérer les intersections, avec round, bevel ou mitter.
Pour un dégradé, on crée un objet canvasGradient (avec createLinearGradient()
ou createRadialGradient()), auquel on affile fillStyle.
var linear = context.createLinearGradient(0, 0, 0, 150);
linear.addColorStop(0, 'white');
linear.addColorStop(1, '#1791a7');
context.fillStyle = linear;
context.fillRect(20, 20, 110, 110);
Avec un exemple :
<script>
var canvas = document.querySelector('#canvas');
var context = canvas.getContext('2d');
var linear = context.createLinearGradient(0, 0, 0, 150);
linear.addColorStop(0, 'white');
linear.addColorStop(0.5, '#1791a7');
linear.addColorStop(0.5, 'orange');
linear.addColorStop(1, 'white');
context.fillStyle = linear;
context.fillRect(10, 10, 130, 130); </script>
Ou :
var radial = context.createRadialGradient(75, 75, 0, 130, 130, 150);
radial.addColorStop(0, '#1791a7');
radial.addColorStop(1, 'white');
context.fillStyle = radial;
context.fillRect(10, 10, 130, 130);
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 26.
L'API File
L'API File permet de récupérer le nom d'un fichier sur l'ordinateur de l'usager :
<input id="file" type="file" multiple />
<script>
document.querySelector('#file').onchange = function() {
alert(this.files[0].name);
};
</script>
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.
JavaScript
FICHE 27.
Drag & Drop
Fiche réalisée d'après le travail de Sébastien de la Marck et Johann Pardanaud (licence CC BY-NC-SA) sur http://www.siteduzero.com/.
par F. Reynaud. 2012.