Beruflich Dokumente
Kultur Dokumente
Avertissements : Certaines fonctionnalités ne sont pas compatibles avec la version 1.0 de Safari.
Lors du dernier TP, nous avons utilisé des fonctions javascript pour modifier les styles de certaines balises (a, li, ul).
Une autre possibilité (offrant une meilleure compatibilité) est d’inclure ces modifications directement dans le html au
moyen de la balise style, comme nous allons le voir maintenant.
function debut()
{
cachemenu();
position("menu1","0px","0px");
position("menu2","100px","0px");
}
Notez que l’on indique le type (ici text/css), comme pour la balise script. Notez également les marques de
commentaires pour éviter les affichages intempestifs dans les navigateurs n’interprétant pas les styles.
d) l’insertion des styles s’effectue en indiquant d’abord l’élément dont on veut modifier l’aspect, puis, entre accolades,
l’attribut à modifier suivi de deux points (:) et enfin la valeur de l’attribut. Un point-virgule termine l’instruction :
body{
margin-top: 0px;
margin-bottom: 0px;
}
Notez que les guillemets ne figurent pas dans les instructions de style, et qu’on y indique les unités.
De cette manière, nous allons définir les styles précédemment mis en place dans la fonction change_style.
a{
color: black;
text-decoration: none;
}
li{
list-style-type: none;
}
ul{
margin: 0px;
}
Notez les noms des propriétés différents en javascript et en CSS (JS : textDecoration / CSS : text-decoration).
Vous vérifierez le fonctionnement sur différents navigateurs et systèmes d’exploitation.
Erreurs à éviter :
- omission du point-virgule (;)
- insertion du signe égal (=) à la place des deux points (:)
Menu2 : javascript externe et styles dans les balises
Nous allons mettre en place un système de menu différent, dans lequel nous modifierons l’aspect des liens et du fond
lors du survol avec la souris. L’intérêt de ce TP résidera à la fois dans la manière de coder l’application et dans
l’application elle-même. Il s’agira d’un menu à un seul niveau, mais on pourrait généraliser sur plusieurs niveaux en
reprenant les techniques de menu1.
On insère le lien au fichier externe au moyen de l’attribut src, comme pour une image. Ici, le fichier menu-def.js est
au même niveau que la page dans laquelle le script est invoqué (adressage relatif).
Un fichier javascript (extension .js) ne contient pas de html, seulement du code javascript. Lorsqu’il est invoqué dans
une balise script, son contenu est chargé dans la page html et toutes les variables et fonctions déclarées dans le fichier
deviennent accessibles dans cette page, comme si le code y avait été saisi directement.
Cette méthode présente surtout l’avantage de pouvoir utiliser un même code dans plusieurs pages différentes -
mutualisation du code = maintenance facilitée, mais elle permet aussi de séparer les éléments lorsque cela devient
utile/nécessaire - code long, déclaration de tableaux, etc.
Nous allons utiliser cette technique pour créer un système de menu dont les données principales (texte, liens, cibles et
couleurs) seront stockées dans des tableaux.
Les tableaux en javascript
Les tableaux sont des variables capables d’en contenir d’autres. Ils permettent de manipuler un grand nombre de
données comme un ensemble et, grâce notamment aux boucles, d’en lire, écrire et modifier les éléments.
textes_menu[0] = "Accueil"
Nb = textes_menu.length;
Préparation : menu-def.js
Il reste, dans ce script externe, à remplir les trois tableaux en indiquant pour chaque élément les valeurs
conformément au cahier des charges, exemple pour le premier élément :
textes_menu[0]= "Accueil";
liens_menu[0]= "#";
cibles_menu[0]="_self";
Vous compléterez sur ce même modèle les définitions pour les 6 autres éléments, sans oublier de modifier l’indice (de
1 à 6).
Cette technique s’ajoute à celles déjà rencontrées pour l’insertion des styles dans une page html. Elle consiste à écrire
les attributs de style directement dans la balise (ouverture), comme on le fait pour l’attribut src de la balise img ou
href de la balise a. La différence est que le style ne s’applique qu’à cette balise en particulier.
On pourra par exemple écrire :
Ce que l’on pourrait traduire par : « pour cette balise div seulement, la couleur de l’arrière-plan sera le vert ».
On peut inclure plusieurs styles dans la même balise en les séparant par des points-virgules. Nous utiliserons cette
technique dans la page menu2.htm, pour les styles modifiés par les survols.
Les styles fixes sont ceux qui ne seront pas concernés par l’interactivité. Il s’agit des polices de caractères et de la
suppression des soulignements des liens. Pour ces styles nous utiliserons une balise <style> dans l’en-tête.
Vous ajouterez donc les styles suivants dans les balises head :
<style>
body{
font : 10px Arial, Helvetica, sans-serif;
}
a{
text-decoration:none;
}
</style>
commande="";
Ceci est nécessaire dans la mesure où nous n’utiliserons plus par la suite que l’opérateur d’incrément +=.
Nous créerons d’abord un conteneur pour le menu avec le style permettant de le placer dans la page, il s’agira d’une
balise div, avec gestion des attributs position, top et left :
commande+="<div style='position:absolute;top:"+haut+"px;left:"+gauche+"px'>";
Notez l’intégration des variables (en rouge) issues de menu_def.js dans la ligne de commande. Notez également
l’emploi des guillemets simples et doubles. A l’exécution, commande deviendra :
<div style='position:absolute;top:5px;left:5px'>
Nous ne fermons pas cette balise div tout de suite car nous devons bien sûr y intégrer le contenu, c’est-à-dire les
éléments du menu. Examinons dans un premier temps ce que devront être chacun de ces éléments :
- Un conteneur pour contrôler la couleur du fond dans lequel on placera :
o Un lien qui reprendra les 3 données texte/URL/cible et qui intégrera au survol :
1. Le changement de couleur du texte
2. Le changement de couleur du fond
Nous pouvons écrire le format général de ce code html (pour l’élément 0)
style = 'color:couleur_textes'
onmouseout = 'this.style.color="couleur_textes";
document.getElementById("id0").style.backgroundColor="couleur_fond"'>
textes_menu[0]</a>
</div>
Remarques :
Les éléments en rouge sont les variables en provenance de menu_def.js. Il s’agit de tableaux ou de variables standard.
Les caractères en bleu (ici 0) constitue l’indice qui devra changer pour chaque élément.
La modification de la couleur du fond rend nécessaire la création d’un Id spécifique pour chaque div, puisqu’on doit la
référencer par getElementById depuis la balise a. On pourrait bien sûr écrire 6 fois ces lignes (pour chacun des 6 éléments)
mais cela serait fastidieux et supposerait que nous connaissons le nobre d’éléments du menu. Une gestion en javascript nous
permet de gagner en longueur de code, et de minimiser le risque d’erreur de saisie, mais aussi de relier, grâce à javascript, les
données html à un fichier externe facile à modifier.
Nous utiliserons pour cela une boucle qui créera autant de nouvelles div que d’éléments de menu. Vous écrirez maintenant le
code en police Courier new :
for(i=0;i<textes_menu.length;i++){
Notez ici qu’on pouvait prendre n’importe lequel des trois tableaux puisqu’ils ont tous le même nombre d’éléments.
On écrit ensuite le code qui créé chaque div avec son Id spécifique et son style pour la couleur du fond.
Attention, l’espace devant style est obligatoire pour séparer les attributs.
On rédige ensuite le code qui créé la balise a, qui est la plus compliquée, aussi allons-nous la traiter ligne par ligne.
2 – Insertion du style.
//couleur des textes en remplacement du bleu stabdard des liens
commande+=" style='color:"+couleur_textes+"'";
3 – Gestion du survol avec l’ évènement onmouseover dans la balise a.
Attention, il s’agit d’une commande javascript qui génère une autre commande javascript, cette imbrication rend nécessaire la
protection de certains guillemets encadrant des données. Ces guillemets protégés ne seront pas être interprétés comme des
débuts ou fins de chaînes, mais comme n’importe quel autre caractère. Cette protection s’effectue en faisant précéder le
caractère d’un \ (antislash ou backslash). On dit que l’on échappe le caractère.
Ainsi, à l’exécution de
Commande = "onmouseover='this.style.color=\""+couleur_survol+"\"'";
onmouseover='this.style.color="blue"'