Divers

Les restes
Voici la page où l'on réchauffe les restes et où l'on tient vaguement les promesses inconsidérées faites dans les pages précédentes sur un coup de tête ou pour se débarasser de problèmes génants.


Créer un objet
Créer un objet n'est pas forcément très utile tant que l'on ne peut pas lire et sauvegarder des données, mais bon, ça peut servir, alors voilà la syntaxe:

nom_objet={propriété:valeur [,propriété:valeur]}

Exemple: voiture={portes:5, moteur:"1800 cm3", roues:4}

On accède alors à l'objet de manière classique:

document.write(voiture.portes); voiture.roues=5; (et la roue de secours alors ?)

De toutes façons un objet n'est qu'un tableau dont les éléments ne sont pas forcément numériques et on peut le lire comme tel avec:

document.write(voiture['roues']+' roues motrices et '+voiture['portes']+' portes à claquer fort la nuit');

Voilà, une promesse est une promesse même si elle ne sert pas à grand chose, vous ne pourrez pas dire que l'on vous cache quoi que se soit.


Les expressions régulières
Derrière ce terme que vous connaissez si vous avez fréquenté le monde d'unix (ne le dites pas à votre femme, elle va croire que vous la trompez), se cache tout simplement une stratégie de recherche de chaîne de caractères suffisement complexe pour nécessiter une longue page quasiment aussi inutile que la création d'objets quand on ne peut lire ou écrire des données dans un fichier.
Comme vous n'avez sûrement pas la possibilité de prendre des données via un applet java ou une autre magouille crimo$oft, je n'en parlerais pas plus ici, utilisez un simple indexOf ou lastindexOf pour effectuer des recherches.

Si toutefois vous avez une liaison msiesque sur un truc comme "acces" ou un serveur spécialisé (oracle/sql ou autre), continuez à utiliser les "E-services" businesquesses de ces truands et prenez donc aussi un cours très long et très cher sur les (ex)pressions régulières (de votre porte monnaie), ce sont des experts eux !


Capture d'évènements
Exécuter un script quand on clique sur un lien, c'est bien, mais savoir si la souris bouge et où elle se trouve, ou si la fenêtre a changé de taille, si on a appuyé sur une touche (et laquelle) c'est encore mieux.
Ceci s'obtient en utilisant quelques méthodes au nom obscur de l'objet fenêtre/document/autres, captureEvents, releaseEvents (le contraire de capture), routeEvent et HandleEvent, en passant en paramètre le type d'évenement que l'ont veut capturer avec l'objet "Event" et ses propriétés.

Exemple de déclaration: window.captureEvents(Event.CLICK)

  • La présence de "window." est ici nécessaire puisque captureEvent peut s'appliquer à plusieurs objets y compris le navigateur lui-même.
  • Il est possible de capturer plusieurs types d'évéments à la fois, il suffit de séparer les paramètres par "|", exemple: window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN)
  • Ce n'est pas tout, il ne suffit pas de dire que l'on veut intercepter les clicks de souris, il faut encore expliquer au programme ce qu'on veut en faire et où on le fait.

Ce qu'il faut en faire: function clic(x) {// Traitement du clic ici;}

  • Si la routine ne retourne rien ou "false", seul le contenu de la fonction est executé et les clics ne font rien d'autre quel que soit l'endroit où l'on clique (dans ce cas-ci c'est dans toute la fenêtre et pas ailleurs (window.capture...)).
  • Si la routine retourne "true", le contenu est exécuté, puis s'il s'agit d'un clic sur un lien, l'exécution se fait comme s'il n'avait pas été intercepté, ça peut aussi servir à intercepter les click dans une zone précise de l'écran en testant par exemple la position x-y de la souris et en exécutant quelque chose dans ce cas-ci, sans pour autant perturber les clicks dans d'autres zones.
  • Pour des cas plus complexes, il faut utiliser le paramètre qui est envoyé à cette routine et la fonction routeEvent, Exemple:
    function clic(x){var y=routeEvent(x); if (y==false) return false; else return true;}
  • Ou la totale en déroutant par exemple tous les clicks vers un lien:
    function clic(x){window.document.links[0].handleEvent(x)}

Et enfin, où on le fait, avec: window.onClick=click; (sans les parenthèses de la fonction), et il faut bien sûr encore écrire la fonction "click()", avec le traitement de votre choix.

Quand on ne veut plus intercepter les clicks: window.releaseEvents(Event.CLICK).

Simple dans le principe, mais pas évident à mettre en oeuvre pour des choses compliquées, la plus grosse partie du travail consiste en fait à trouver les noms des Events et propriétés dans le fatras du javascript...

Voici une petite liste qui pourra vous aider, faites très attention aux pièges à cons, si vous interceptez tous les événement vous ne pourrez plus sortir de votre document, voire même du navigateur.

Je ne donne pas d'exemple pour la capture d'événements, les plus tordus d'entre vous ont déjà compris à quoi ça peut servir et ont une assez bonne idée de comment le réaliser sans que je les aide, les autres pourront toujours me demander un coup de main, si besoin.


Les timers
Deux méthodes de divers objets permettent de produire des choses à intervalle régulier, setIntervall, setTimeout, et deux autres de les arrêter, clearIntervall et clearTimeout.

setIntervall permet d'exécuter une routine à intervalle régulier
clearIntervall permet de stopper ce timer.
setTimeout permet lui, de mettre un délai avant l'exécution d'une routine, à noter que si setTimeout exécute la fonction qui le définit, on obtient alors le même résultat qu'avec setIntervall.
Et enfin clearTimeOut (uniquement sur msie ou netscape (je ne me souviens plus du quel)) efface le délai et n'exécute pas la fonction (s'il n'est pas déjà trop tard).

Deux (mauvais) exemples d'utilisation sont donnés dans cette page, un qui change la couleur de fond et l'autre qui fait défiler du texte dans la barre de status.

Voici la syntaxe de setIntervall/setTimeout:

adresse=window.setTimeout(nom_de_la_routine,délai_en_milisecondes);

  • adresse c'est l'adresse de la routine .setTimeout (ou .setIntervall), si on veut arrêter cette dernière, il faudra utiliser cette valeur, on peut la placer dans n'importe quelle variable disponnible.
  • .setTimeout (ou .setIntervall) s'applique soit à la fenêtre (comme ici), soit au document, voire à d'autres objets.
  • nom_de_la_routine, c'est une chaîne de caractères que .setTimeout (ou .setIntervall) attend ici, comme par exemple: 'mon_timer()'.
  • délai_en_milisecondes, si ça vous pose un problème, multipliez simplement le nombre de secondes que vous voulez obtenir par 1000 et ne réfléchissez pas.

Voici donc, sans supplément, les exemples en question. Ne cherchez pas à comprendre comment fonctionne la routine de conversion des couleurs rvb(), ce n'est pas le but de cette page, nous y reviendrons plus loin, plus en détails, en long, en large et en travers.

Le texte défilant et le changement de couleurs. C'est deux fois la même chose, mais comme je suis payé à l'octet...


Cerise sur le gâteau
Si vous en avez marre de glisser toujours les mêmes choses dans les 4312 pages de votre site ou que votre sens de la démesure impose à chaque page html son kilo de script, sachez qu'il est possible de faire des économies substantielles de frappe (ou de copier/coller) en utilisant une ou plusieurs pages de scripts externes.

Il vous suffit de rajouter entre <HEAD> et </HEAD>, un simple <SCRIPT LANGUAGE="Javascript" SRC="mes_script1.js"></SCRIPT>, puis de créer un simple fichier de nom "mes_script1.js" contenant les routines de votre choix SANS AUCUN MARQUEUR HTML, et le tour est joué.

Aux endroits où vous avez besoin d'une routine, appelez-là simplement comme si elle était dans la page.


Et bien d'autres choses encore
Rien de ceci n'est caché ou spécial dans le javascript, en fait il existe surement encore d'autres merveilles perdues dans le foisonnement des méthodes et des fonctions, mais le sujet est vaste et la vie est courte, quand au temps libre, il est encore plus maigrelet, seul un expert du javascript pourrait en exploiter toutes les finesses.

RetourInfo Suite

Dernière mise à jour de cette page: 04/09/2001, visiteurs: depuis le 6 avril 2002