Petit truc pour faire des slide-shows
à la Whygee
(C) Yann GUIDON / whygee@f-cpu.org 08/2005
Some functions, behaviour as well as rendering might
not work as expected, it was designed for Mozilla.
The code was created for compactness, convenience, but not
for compatibility and it's not a P0werP01nt imitation.
Adding M$IE pseudo-compliance decupled the hacking factor !
Les seules touches qui fonctionnent sont :
droite/bas, haut/gauche, home, end. La souris n'est pas traitée.
L'intéraction, la présentation et les fonctions sont minimales
pour se concentrer uniquement sur les informations à communiquer.
L'idée du bidule est d'avoir plusieurs "pages" se recouvrant les unes les autres,
pour ne pas ralentir l'affichage lors d'une transition. Au début j'ai utilisé
zIndex mais là ça marche avec la propriété 'visibility'. Si du JavaScript est intégré,
le temps de démarrage et d'exécution se ressent uniquement au chargement du document HTML,
pas lors d'une transition.
Pour que le brouteur puisse générer le menu, les "pages" sont
dans des <div>s à l'intérieur d'un autre <div>,
ce qui facilite la recherche dans l'arbre DOM (on a au moins
un nom d'id à chercher en premier). Tous les sous-<div>s sont ajoutés
au menu dans l'ordre d'écriture du source.
Au début, tout allait bien : je codais
clean et facile pour Moz et ça marchait impec'.
Puis des gens ont dit que ça foirait lamentablement sous M$IE
(c'est normal, faut avouer). J'en ai déterré un et vu que les incompatibilités
ne sont pas nombreuses. Mais elles sont super chiantes !!!
Sous Moz, c'est simple : on peut définir les dimensions d'une zone <div>
avec
left, right, top, bottom, width, height.
M$IE ne reconnait pas
bottom dans le CSS.
Ca pose un vrai problème d'interaction avec les scrollbars !!!
Si un <div> dépasse par en bas, toute la fenêtre aura un scrollbar
vertical et les touches haut/bas joueront dessus. gaaaaaahhhh !
Donc il faut forcer la taille des <div>s.
Mais sans bottom c'est super galère car on
ne connait pas la taille de la fenêtre ! En plus, bottom réagit
automatiquement au redimensionnement (appui sur F11 par exemple).
Alors que JavaScript ne fournit pas d'événement de redimensionnement
de la fenêtre :-/
La solution utilisée ici est de redimensionner tous les <div>s
au démarrage en lisant la propriété
document.body.clientHeight
mais celle-ci renvoit des dimensions différentes selon le brouteur !!
Donc encore un autre hack à la con : il faut "détecter" le brouteur
pour adapter la valeur.
Le résultat de la cure de portabilité est pire qu'au début.
En particulier il faut recharger la page si la taille de la fenêtre
est changée. Cela m'a forcé à remettre le code de gestion des cookies
pour ne pas avoir à retrouver manuellement la page qui était visualisée.
Sans parler du code lourd et pas beau ni concis.
On ne me reprendra plus à faire du code portable !!!
texte ...
texte ...
texte ...
texte...PourVérifierLeFonctionnementDesScrollbars
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
plop
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
texte ...
plop
texte ...
texte ...
texte ...
texte ...
texte ...
the end !