Le JavaScript est un langage qui permet d'améliorer le HTML: il permet de faire des animations, de jongler avec des fenêtres, valider un formulaire en cours de saisie, faire des calculs, traitement de chaîne, gérer des "cookies", faire du HTML dynamique, etc...
C'est un langage de programmation qui ressemble fort C, orienté objet, interprété (comme le HTML, et contrairement au Javaqu'il ne faut pas confondre). Il permet donc de faire des choses encore plus puissantes que le HTML, mais il s'adresse aux programmeurs confirmés. Il permet d'utiliser des variables, des tests, des boucles, des tableaux, des objets, des fonctions, des évènements, des boîtes de dialogues...
En pratique, on englobe des passages en langage Javascript dans une page HTML.
Le gros inconvénient de ce langage est qu'il existe de nombreuses différences entre Netscape et Internet Explorer, et que le programmeur doit souvent prendre en compte dans son programme ces 2 navigateurs, ce qui complexifie encore la tâche (et en plus entre les versions successives).
Cette page n'est même pas un tutorial, mais juste quelques liens vers des guides, références et exemples JavaScript.
D'abord un très bon bouquin:
JavaScript, Michael Moncur (Le Tout en Poche, CampusPress, 10,88€)
cookies: stockage d'informations sur votre ordinateur
opaque: opacité d'une image lorsque la souris passe dessus
fonts: affiche un même texte avec plusieurs polices (évite répétitions)
affmime: affiche tous les plug-ins reconnus par votre navigateur
download music: joue une musique de fond et propose de la décharger
Quelques trucs en vrac
Pour avoir la console JavaScript dans Netscape (pour voir les erreurs d'exécution), taper javascript: dans la barre d'adresse.
Sous Internet Explorer, si vous voyez dans la barre d'état "Terminé, mais il existe des erreurs sur la page", double-cliquer sur cette barre pour avoir l'erreur JavaScript.
Dans la barre d'adresse, on peut faire directement figurer un ordre JavaScript. Par exemple:
On ne peut mettre un ; après un ordre JavaScript que s'il est suivi d'un autre ordre sur la même ligne. Réciproquement, on peut écrire une instruction sur plusieurs lignes si celle-ci est trop longue. On peut mettre ou non des espaces entre les opérateurs, et indenter comme on veut. On peut entourer les chaînes de guillemets ou de quotes. C'est cool.
En plus des objets prédéfinis par le navigateur (navigator, window, screen), il y a aussi les objets String, Array, Math, Date...
Le nom d'une variable peut être lui-même une variable (chaîne). Pour voir son contenu (ça revient à enlever les guillemets), on utilise eval(). C'est le truc qu'utilise la calculette (où l'on rentre une expression sans les guillemets, mais que le programme considère comme une chaîne texte). Exemples:
Expression
Résultat
Action annexe
eval("document.bgColor")
eval("Math.PI")
3.141592653589793
eval("3+15*2")
33
eval("toto")
undefined
eval("window.status='coucou'")
coucou
Modifie barre d'état
eval("window.confirm('Etes-vous sûr ?')")
true
Boîte de dialogue
eval("open()")
[Object]
Ouvre une fenêtre
Autre exemple: si une variable nomImage contient "ste_sophie" et que le nom de la 3ème image du document est "ste_sophie", il est équivalent d'écrire:
document.images[2]
document.images.ste_sophie
document.images["ste_sophie"]
document.images[nomImage]
document.images.eval(nomImage)
Un ordre JavaScript peut écrire dans le document courant avec l'ordre document.write().Exemple: document.write("Ligne de texte<br>")
Un programme JavaScript (dans un HTML) est entouré des balises HTML <script> et </script>.
On peut mettre aussi des ordres JavaScript directement dans un ordre HTML, par exemple dans un gestionnaire d'évènement. Exemple: <a href="toto.htm" onmouseover="document.write('vous avez survolé ce lien')">lien</a>
Affichage d'un message dans la barre d'état (en bas de la fenêtre) lorsqu'on survole un lien: <a href="toto.htm" onmouseover="window.status='vous avez survolé ce lien'; return true" onmouseout="window.status=''">lien</a>
On peut se créer des fenêtres de taille définie, sans boutons etc... pour y charger par exemple un lien ou une image (plutôt qu'un vulgaire target="_blank") de la façon suivante:
<a href="toto.jpg" target="fen" onclick='window.open("","fen", "scrollbars=yes,resizable=yes,width=750,height=580")'>lien</a>
Attention, autant en HTML on peut écrire indifféremment en minuscules ou en majuscules, JavaScript fait la distinction. Exemples: Math.PI, document.bgColor, window.open(), ...
En HTML, on encadre un commentaire par <!-- et -->, en JavaScript, par /* et */ (ou // si sur une seule ligne).
On peut écrire ses fonctions JavaScript dans un fichier à part, qu'on charge dans l'en-tête HTML avec: <script src="toto.js"></script>
On écrit les éventuels scripts à la suite, après une nouvelle balise <script>.
On écrit de préférence les fonctions dans l'en-tête (HEAD), et l'exécution de ces fonctions dans le corps (BODY) du document.
On peut spécifier dans la balise <script> l'attribut LANGUAGE= avec comme paramètres possibles: JavaScript, JavaScript1.1, VBScript, ... En effet, on peut écrire aussi en Visual Basic. Mais par défaut c'est JavaScript.
Il y a différentes versions (de compatibilité ascendante heureusement) entre JavaScript. Actuellement, on en est environ à la version 1.7. Par exemple, Internet Explorer 5.0 et Netscape 4.5 ne reconnaissent pas plus que JavaScript1.3. Votre navigateur, par exemple, reconnaît:
Fonction acceptant un nombre variable d'arguments:
function toto()
{
for (var i=0; i<toto.arguments.length; i++)
// toto.arguments[i]
}
Il existe de nombreux sites où l'on peut traduire une page Web en n'importe quelle langue: dans un formulaire, on choisit la langue, et on écrit l'adresse de la page à traduire. Par exemple le site Systran. Repérez ce que exactement le bouton SUBMIT envoie (pour cela on peut transformer le ACTION en "mailto:", voir page sur HTML), et faites une fonction javascript qui fasse la même chose, comme par exemple celle-ci qui <a href="javascript:traduit('en')">traduit cette page en anglais</a>. Le source est dans myfunc.js.
Survol:
On appelle survol ou rollover le fait qu'une image (ou un texte) change lorsque la souris passe dessus, ou qu'une image apparaisse et disparaisse.
En fait, vous avez tous les éléments en main pour faire ça. Il faut que vous ayez à l'esprit les choses suivantes:
Les styles. Le style permet de positionner du texte ou une image par-dessus une autre, ou décalée de telle quantité. C'est l'attribut "position". Il permet aussi de rendre une image visible ou invisible (attribut "visibility").
La balise <DIV>. Elle permet d'encadrer la portion (ici une image) à positionner. C'est sur elle que portera le style de positionnement, par exemple STYLE="position:absolute; top:100; left:50" (position par rapport à un DIV englobant ayant le style position:relative).
L'image. Elle doit avoir un nom grâce à l'attribut NAME (ou ID). On peut aussi la rendre invisible de prime abord avec STYLE="visibility:hidden". On peut aussi faire porter cet attribut sur le DIV qui l'englobe, auquel cas celui-ci doit avoir un ID (pour pouvoir l'adresser afin de basculer l'attribut de visibilité).
La zone à survoler. Si c'est une image entière qui doit réagir, on l'encadre par <A ...>; sinon (si c'est une portion d'image), on emploie l'attribut USEMAP (dans la balise IMG, avec BORDER=0) et des balises <AREA>.
Les gestionnaires ONMOUSEOVER et ONMOUSEOUT qui appelleront l'image à charger, ou à rendre visible, etc... C'est la pièce essentielle du rollover, qu'on met dans la balise <A> (image entière) ou <AREA> (portion d'image).
Si l'image qui doit apparaître n'a jamais encore été chargée en mémoire lors du chargement de la page, il faut le faire en passant par un objet Image, et un gestionnaire ONLOAD dans BODY. Ceci permettra de les mettre dans le cache, et elles apparaîtront instantanément la 1ère fois (et les autres fois aussi bien sûr).
Si l'image est d'abord chargée, mais invisible, ce n'est pas la peine de faire ça.
Pour qu'une image apparaisse sur une autre, on peut aussi utiliser le style de positionnement "z-index" (rang dans la "pile" d'images).
Enfin, ayez présent à l'esprit que la première des choses est que votre code soit compatible entre les différents navigateurs, et ne pas privilégier les plus récents. Pour les calques, ce programme calque.js peut assurer la compatibilité.
Remarques:
Pour encadrer une image entière qui doit réagir, ou du texte, on emploie <A HREF="#" ONCLICK="return(false)" ...>
En effet, avec Netscape, la balise A n'est pas active sans le HREF. Ici c'est un HREF bidon (même page, mais en haut), qui de toute façon ne fait rien à cause du return(false).
Pour charger une image dans le cache, on procède ainsi, en Javascript:
var a1 = new Image; // variable bidon
a1.src = "toto.gif" // charge l'image
Dans la suite du programme, on peut très bien manipuler "toto.gif" (et non pas a1). L'image sera cherchée dans le cache.
Le rollover doit utiliser des images de même taille: c'est plus esthétique car ça ne décale pas le texte après.
L'inclusion d'objets en HTML est souvent tributaire de la version du navigateur. On peut employer Javascript pour rendre l'animation indépendante du matériel (mais c'est fastidieux). Voyez cet exemple, pris dans webreference.com.