Dynamic HTML


Toutes les bases nécessaires à l'emploi du DHTML étant posées dans les chapitres précédents, nous pouvons maintenant appliquer ces principes pour créer nos pages avec des effets DHTML.

Les possibilités du DHTML sont très vaste et il n'est pas possible ici de vous donner une liste exhaustive de celles-ci mais les quelques petits exemples suivants vont vous permettre de mieux comprendre le DHTML et de construire vous-mêmes vos propres effets.

Il est à signaler aussi que vous pouvez trouver sur le Net de nombreux exemples de script DHTML et qu'au fil du temps, le nombre de ces exemples ne fera qu'augmenter (Le site builder de Microsoft, de Netscape etc.)

Quatre exemples de déplacement de texte, un exemple d'apparition et disparition de texte vous sont proposés : tous ceux-ci sont parfaitement visibles par Internet Explorer et Netscape. N'oubliez pas que ces scripts DHTML et bien d'autres sont très facilement réalisables avec WebExpert 5 (assistants proposés sous l'onglet "DHTML")

En Annexe, vous trouverez d'autres quelques exemples ainsi qu'un script de détection qui pourront vous aider dans la création de vos propres sites.

1. Déplacement de texte : droite vers gauche

Pour faire se déplacer un texte, par exemple de droite vers la gauche, plusieurs exigences doivent être remplies.

a) Description des scripts

L'effet de déplacement du texte est réalisé par le changement (successif) de la position (left dans cet exemple) de l'élément qui le contient.

C'est l'élément, ici DIV, qui change de position et celui-ci peut bien sûr contenir autre chose que du texte (une image, un tableau etc.).

b) Positionnement de l'élément

C'est un style en ligne qui est employé pour positionner et définir les attributs de l'élément DIV mais on peut tout aussi facilement le faire avec une feuille de style globale ou liée (avec l'avantage de ne plus devoir définir le style pour les autres effets).

<div ID="texte" style="text-align:center;font-weight:bold;font-size:20px;color:red;position:relative">
WebExpert version 5 : à posséder absolument !
</div>

1. Description de l'élément DIV

2. Changement de position

function deplace(from, to) {
    if (from > to) {
    pos.left = (from -= 20);
    setTimeout('deplace(' + from + ',' + to + ')', 75);
}
}

C'est le changement successif des valeurs de la position left de l'élément DIV qui donne l'effet de déplacement : il faut donc faire varier ces valeurs par une fonction. Celle-ci se nomme ici déplace.

Comme la valeur de la propriété de position (left) doit changer successivement (prendre des valeurs différentes), on crée une fonction qui effectue ce changement, à partir d'une position de départ (variable from) jusqu'à une position terminale (variable to).

La valeur de la position (left) de l'élément est diminuée d'une valeur de 20 dans cet exemple : autrement dit, l'élément changera de position de 20 en 20, cette valeur soustraite de la valeur de départ (from) : le premier changement sera donc (from - 20).
Pour que la fonction reçoive des valeurs de from différentes, on emploie un timer qui relance la fonction deplace avec une valeur de from qui est changée (-20) et pendant un temps déterminé (ici 75 msec) : après chaque 75ms, une nouvelle valeur de position est attribuée à l'élément.

Enfin, pour que le changement de valeur de position ne s'effectue pas indéfiniment, on place une condition if qui détermine que lorsque la valeur de départ (from) est égale ou plus petite (from>to) à la valeur terminale (to), la fonction s'arrête.

InformationVous pouvez faire changer la vitesse de déplacement en jouant soit sur l'intervalle de position (from-=20) ou sur le délai du timer (>75msec).

3. Détection du navigateur et lancement de la fonction

Comme nous l'avons vu, les deux grands navigateurs n'utilisent pas la même syntaxe pour la programmation des scripts.

En effet, la propriété visibilité de l'objet (texte) se détermine sous Internet Explorer par document.all.texte.style.left tandis que pour Netscape, la syntaxe est document.texte.left ! La variable pos (dans la fonction deplace) doit donc prendre respectivement pour Internet Explorer (document.all.texte.style) et pour Netscape (document.texte).

Il y a plusieurs solutions pour réaliser le changement de syntaxe : soit vous créez une variable qui prend la valeur correcte (pos), en fonction du navigateur (comme proposé dans la fonction exemple ci-dessus), soit vous créez deux fonctions (deplace() et deplacen()) et en fonction du navigateur employé, vous lancez la fonction qui lui correspond.

Pour vous montrer l'exemple ci-dessous, c'est la dernière solution qui est choisie, mais vous pourrez consulter la seconde dans une page fournie en Annexe.

4. Détail de la procédure

a) Description du script
b) Code du script
<SCRIPT LANGUAGE = "JavaScript">
<!-- debut du script
/* Détection d'Internet Explorer (version >4) : fonctionne donc pour la version bêta 5.0 */

var ms = navigator.appVersion.indexOf("MSIE")
ie4 = (ms>0) && (parseInt(navigator.appVersion.substring(ms+5, ms+6)) >= 4)

function deplace(from, to) {
    if (from > to) {
document.all.texte.style.left = (from -= 20);
setTimeout('deplace(' + from + ',' + to + ')', 75);
}
}

function deplacen(from, to) {
if (from > to) {
document.texte.left = (from -= 20);
setTimeout('deplacen(' + from + ',' + to + ')', 75);
}
}
// Fin du script -->
</SCRIPT>

c) Condition pour la détection

Sur le chargement de la page :

<body onload="ie4?deplace(600,0):deplacen(600,0)">

Par l'action (clic) d'un bouton (ou sur lien)

onclick = "ie4?deplace(600,0):deplacen(600,0)"

2. Déplacement de texte : gauche vers droite

On procède de la même manière que l'exemple précédent : la fonction est quasiment identique (un signe de différence) et les valeurs de départ et de fin seront bien sûr différente, puisque l'élément vient de gauche cette fois.

a) Positionnement de l'élément

Dans cet exemple, c'est également un style en ligne qui est employé pour positionner et définir les attributs de l'élément DIV.

<div ID="texte2" style="text-align:center;font-weight:bold;font-size:20px;color:black;position:relative;visibility:hidden">
WebExpert 5 : mon éditeur HTML préféré, bien sûr...
</div>

b) Changement de position

function deplace2(from, to) {
    if (from < to) {
    document.all.texte2.style.left = (from += 20);
    setTimeout('deplace2(' + from + ',' + to + ')', 75);
}
}

function deplacen2(from, to) {
    if (from < to) {
    document.texte2.left = (from += 20);
    setTimeout('deplacen2(' + from + ',' + to + ')', 75);
}
}

Est changé dans ce script le signe de la portion (from+=20) puisque cette fois, la valeur de left augmente, d'une valeur négative (pour donner l'impression que le texte vient du côté de l'écran) jusqu'à la valeur 0 (parce que le texte est centré : text-align:center). La condition ici est inverse, puisque la valeur de départ est plus petite (from<to). Sont données cette fois les deux fonctions qui correspondent aux deux navigateurs : Internet Explorer et Netscape.
Les valeurs de départ employées sont -620 et 0 (deplace2(-620,0)).

c) Condition pour la détection

Sur le chargement de la page :

<body onload="ie4?deplace2(-620,0):deplacen2(-620,0)">

Par l'action (clic) d'un bouton

<FORM>
<input type=button Value="Déplacement gauche-droite" onclick = "ie4?deplace2(-620,0):deplacen2(-620,0)">
</FORM>

3. Déplacement de texte : bas vers haut

Pour cet exemple et le suivant, la fonction est un peu différente, c'est la propriété top de l'élément qui change de valeur. Pour le reste, le principe est identique aux deux exercices précédents.

a) Positionnement de l'élément

Dans cet exemple, c'est également un style en ligne qui est employé pour positionner et définir les attributs de l'élément DIV.

<div ID="texte4" style="text-align:center;font-size:20px;color:green;position:relative;visibility:hidden">
De superbes sites graphiques avec WebExpert 5, c'est facile...
</div>

b) Changement de position

function deplace4(from, to) {
if (from > to) {
document.all.texte4.style.top = (from -= 10);
setTimeout('deplace4(' + from + ',' + to + ')', 75);
}
}

function deplacen4(from, to) {
if (from > to) {
document.texte4.top = (from -= 10);
setTimeout('deplacen4(' + from + ',' + to + ')', 75);
}
}

C'est donc la propriété top de l'élément qui doit varier, d'une valeur plus importante (200) puisque le texte part d'en bas, vers le haut, qui correspond à une valeur plus petite (20). La condition est donc (from >to) et est choisi un pas de 10 (from-=10).
Sont données également les deux fonctions qui correspondent aux deux navigateurs : Internet Explorer et Netscape.
Les valeurs de départ employées sont 200 et 20 (deplace4(200,20)).

Remarque : le nombre 4 de la fonction deplace4() est arbitraire et vous appelez la fonction comme bon vous semble bien sûr…

c) Condition pour la détection

Sur le chargement de la page :

<body onload="ie4?deplace4(200,20):deplacen4(200,20)">

Par l'action (clic) d'un bouton

<input type=button Value="Déplacement bas-haut" onclick = "showObject(texte4);ie4?deplace4(200,20):deplacen4(200,20)">

4. Déplacement de texte : haut vers bas

C'est toujours la valeur de la propriété top qui doit varier, mais dans le sens inverse cette fois, puisque que texte descend ! Elle prend une valeur de plus en plus grande, jusqu'à celle de fin de déplacement.

a) Positionnement de l'élément

Dans cet exemple, c'est toujours un style en ligne qui est employé pour positionner et définir les attributs de l'élément DIV.

<div ID="texte3" style="text-align:center;font-size:20px;color:#800000;position:relative;visibility:hidden">
Sans WebExpert 5, le secours doit venir du Ciel ;-)
</div>

b) Changement de position

function deplace3(from, to) {
    if (from < to) {
    document.all.texte3.style.top = (from += 10);
    setTimeout('deplace3(' + from + ',' + to + ')', 75);
}
}

function deplacen3(from, to) {
   if (from < to) {
   document.texte3.top = (from += 10);
    setTimeout('deplacen3(' + from + ',' + to + ')', 75);
}
}

La propriété top de l'élément doit varier, d'une valeur plus petite (-40) puisque le texte part d'en haut, vers le bas, qui correspond à une valeur plus grande (80). La condition est donc (from <to) et est choisi également un pas de 10 (from+=10).
Vous sont données les deux fonctions qui correspondent aux deux navigateurs : Internet Explorer et Netscape et les valeurs de départ employées sont -40 et 80 (deplace3(-40,80)).

c) Condition pour la détection

Sur le chargement de la page :

<body onload="ie4?deplace3(-40,80):deplacen3(-40,80)">

Par l'action (clic) d'un bouton

<input type=button Value="Déplacement haut-bas"
onclick = "showObject(texte3);ie4?deplace3(-40,80):deplacen3(-40,80)">

5. Apparition - disparition de texte

Dans cet exemple, c'est la propriété visibility qui est manipulée. On change celle-ci pour l'élément concerné et celui-ci disparaît s'il était visible ou apparaît s'il était invisible : on change donc dynamiquement la propriété...

Cela peut-être intéressant, notamment pour de nombreux effets, où l'objet doit apparaître (alors qu'il est par défaut invisible), et pour proposer des informations : c'est cette illustration que j'ai choisie.

a) Procédure

b) Attributs de style

On créer d'abord une feuille de style globale, comme expliqué dans le chapitre sur les feuilles de style :

<STYLE TYPE="text/css">
<!--
.info1 {font-size:12px;font-weight: bold;color:#800000;position:absolute;top:10px;left:200px;width:144;
visibility:hidden}
.info2 {font-size:12px;font-weight: bold;color:navy;position:absolute;top:10px;left:200px;width:144;
visibility:hidden}
-->
</STYLE>

InformationLes signes (<!-- -->) qui englobent les codes de définition des classes ".info1" et ".info2" sont présents  uniquement pour permettre aux navigateurs de version inférieure de ne pas tenir compte de ces codes.

Peu de remarques à formuler si ce n'est que ces attributs sont calculés pour que les deux textes se superposent l'un sur l'autre, et que les textes aient des couleurs différentes. J'ai choisi également des les rendre invisibles par défaut (visibility:hidden), mais ce n'est pas obligatoire ;-)

c) Éléments

De même, ici, vous pouvez placer toutes sortes d'objet comme contenu des éléments que vous créez (texte, image, tableau...). J'ai choisi des éléments DIV auxquels je vais joindre la classe (CLASS="info") qui leur convient, en plus de les identifier bien sûr (ID).

<DIV ID = "txt" CLASS="info1">
Première information qui apparaît après avoir cliqué sur le premier lien (pour les deux navigateurs)
</DIV>
<DIV ID = "txt2" CLASS="info2">
Deuxième information qui apparaît après avoir cliqué sur le deuxième lien (première info invisible)
</DIV>

d) Fonctions

Pour changer la propriété visibility, nous devons créer deux fonctions différentes, très simples, qui emploient une variable qui, comme dans les exercices précédents, nous permettront d'employer la syntaxe adéquate correspondant aux deux grands navigateurs.

Cette fonction vous sera très pratique car il est fréquent que l'on veuille faire apparaître ou disparaître des objets (éléments)

Puisqu'est choisi ici (arbitrairement) de cacher les éléments par défaut, il faudra faire en sorte que le clic sur le pseudo-ancre non seulement fasse apparaître la seconde information mais également, fasse disparaître la première et vice versa.

<SCRIPT LANGUAGE = "JavaScript">
<!--
/* Fait apparaître l'objet */
function montre(object) {object.visibility = vis}

/* Fait disparaître l'objet */
function cache(object) {object.visibility = invis}
//-->
</SCRIPT>

Les variables nécessaires à l'emploi de la bonne syntaxe (IE 5.x et N 4.x) sont vis et invis. Pour Internet Explorer, c'est hidden et visible qu'il faut employer tandis que pour Netscape, c'est hide et show par contre. Pour t1 et t2, c'est comme vu précédemment.

e) Détection du navigateur utilisé

Voici le script complet, que vous devez placer en dessous des éléments !

<SCRIPT LANGUAGE = "JavaScript">
var NET = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 4);
var invis = (NET) ? 'hide' : 'hidden';
var vis = (NET) ? 'show' : 'visible';
var t1 = (NET) ? document.txt : document.all.txt.style;
var t2 = (NET) ? document.txt2 : document.all.txt2.style;
</SCRIPT>

La détection est effectuée et les variables prennent leur valeur respective.

f) Pseudo-ancre

Comme nous voulons vous donner des exemples parfaitement compatibles entre les deux navigateurs, on parle de pseudo-ancre car en effet, Netscape ne reconnaît actuellement pas l'événement "onclick" si ce n'est sur une ancre (lien) alors qu'IE 5.x l'accepte !

L'astuce consiste donc à insérer les portions de texte qui vont constituer la commande des fonctions, dans un élément A (Anchor) mais dont l'URL sera fictive. De plus, avec le code que vous trouvez ci-dessous, il n'y aura aucun problème car remplacer l'adresse par un simple espace pose des problèmes sous Netscape...

<A HREF = "javascript://" onclick = "cache(t2);montre(t1)">Première information</A><BR>
<A HREF = "javascript://" onclick = "cache(t1);montre(t2)">Deuxième information</A>

Il ne faut sans doute pas vous expliquer l'événement "onclick" qui est très simple, puissant et dont la syntaxe vous est proposée ci-dessus ;-)

Après tout ce travail, voici le résultat.


Première information
Deuxième information

Une erreur ! Il manque le lien sur le deuxième texte qui commande la venue de la seconde information ?
En fait, si vous ne désirez pas de soulignement, vous pouvez créer une classe spéciale pour ces ancres, et obtenir ainsi un lien sans soulignement.

Code de cette pseudo-classe spéciale :
A.nn {text-decoration:none}
:visited.nn {text-decoration:none;font-style:normal}

InformationL'attribut "font-style:normal" a été ajouté pour enlever la mise en italique des liens visités (feuille de style liée de Tutor DHTML).




Feuilles de style - Positionnement dynamique - Effets de transition (IE) - Annexe
[Table des matières - Avant-propos - Accueil Page-Web]
Pour imprimer cette page