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.
|