Objectif du script Ce script permet de positionner un calque en haut de page, toujours visible, quelles que soient les actions du visiteur sur l'ascenseur. Ce script est très utile pour afficher un logo ou un menu accessible en permanence par les visiteurs, même si la hauteur de la page dépasse celle de l'écran. Pour tester ce script, utilisez l'ascenceur vertical et observez le logo en bas de la page. Principe de fonctionnement Les navigateurs ne possèdent pas l'événement onScroll qui détecterait l'action du visiteur sur les ascenseurs et le défilement de la page. On utilise donc une astuce de programmation : un timer est déclenché pour scruter à intervalle régulier la position de la page et pour déplacer ainsi le calque afin de le maintenir toujours visible. Pour limiter les saccades dû au déplacement du calque, le calque est déplacé progressivement, par incrément, vers sa position normale. Explication du script Voici le code source du script : Paramétrage du script Le paramétrage du script se fait dans les premières lignes de code : tjs_delai contient le délai du timer, soit le temps en millisecondes entre chaque vérification de la position du calque. tjs_max contient le déplacement maximal en nombre de pixels du calque par intervalle de temps. tjs_mode contient le mode d'affichage : 0 signifie que le calque sera toujours en haut et 1 toujours en bas. Création du calque Pour assurer la compatibilité entre tous les navigateurs, une fonction de création de calque a été définie PrintCalque(). Elle attend en paramètres la position et la taille du calque ainsi que la chaîne HTML qui sera affichée dans ce calque. Dans notre cas, il s'agit d'un logo du site. Cette fonction affiche le code HTML correspondant sur la page selon le navigateur en cours et crée ainis un calque appelé tomber. Le timer qui scrute la position du calque est lancé par setTimeout("Start()",tjs_delai); de la fonction PrintCalque(). Pour être sûr que le calque recouvre bien tous les éléments de la page, l'appel à PrintCalque(100,100,100,100,"TJS"); est placé à la fin de la page, juste avant la balise </BODY>. Le timer Le timer déclenche à intervalle régulier l'appel à la fonction Start() qui repositionne le calque à chaque passage. Le délai du timer est dans la variable tjs_delai, exprimé en millisecondes. Plus le délai est court, plus le calque sera replacé rapidement. En contrepartie, un délai court consomme du temps de traitement et peut ralentir un PC de petite puissance. La fonction Start() contient 2 lignes : MoveLayer("tomber",GetTop()); setTimeout("Start()",tjs_delai); MoveLayer() est détaillée au prochain paragraphe. La 2ème ligne sert à maintenir le timer en fonctionnement. Les fonctions de déplacement La fonction MoveLayer() attend 2 paramètres, le nom du calque à déplacer et la position verticale. Le nom du calque est tomber, la position du calque est calculée par la fonction GetTop() On utilise une fonction ici qui détecte le navigateur et qui gère la compatibilité entre navigateurs automatiquement. Ainsi, pour déplacer un calque, on ne se préoccupe pas de connaître le navigateur, on appelle juste MoveLayer(). Si le navigateur est IE5 ou NS6, on utilise la fonction getElementById() pour accéder au calque et lui affecter sa position verticale. Si le navigateur est IE4, on utilise l'objet all. Pour Netscape 4.X, on utilise l'objet layers. La position du calque La fonction GetTop() attend en paramètre le nom du calque à positionner. Le corps de la fonction est découpée en 2 parties. La première partie récupère, selon le navigateur, la position actuelle du calque dans la variable pos, la position de la page dans wintop et la hauteur utilisable de la page dans avail. La deuxième partie réalise le calcul de la position en fonction du mode d'affichage. Si tjs_mode vaut 0, le calque doit être toujours en haut. Sinon, le calque doit être en bas. La variable delta contient le nombre de pixels dont le calque doit se déplacer. Le maximum de déplacement est dans la variable tjs_max. Elle permet de limiter la vitesse de déplacement du calque et de le rendre ainsi plus lisse et moins saccadé. Améliorations possibles La première amélioration qui vient à l'esprit est d'ajouter la possibilité de faire coller le calque en horizontal, toujours sur un côté, à droite ou à gauche. On peut aussi imaginer une gestion plus amusante du déplacement du calque, avec par exemple un rebond sur le bas de la page. Vous pouvez aussi télécharger le script directement
|