IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Tester (et non écouter) le clavier


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut Tester (et non écouter) le clavier
    Bonjour,

    Après plusieurs recherches, je ne trouve toujours pas la solution à mon problème, c'est pourquoi je me tourne vers vous!

    Donc voilà, je suis sur un petit projet en JavaScript et j'aurais besoin de savoir à tout moment quelles touches du clavier sont pressées.

    Alors bien évidemment, il y a le "onkeypress", mais ça ne correspond pas à ce que je veux.

    Ce que je veux, c'est d'utiliser par exemple un setInterval, qui à chaque période déterminée ira contrôler quelles touches sont pressées. Donc je ne veux pas que l'utilisateur presse une touche et ensuite il se passe quelque chose, je veux que l'ordinateur "scanne" à intervalles réguliers le clavier.

    En fait, mon problème avec le keypress est double. D'une part, cela pose problème quand l'utilisateur laisse une touche appuyée. Ca marche, mais c'est pas uniforme, linéaire. Deuxièmement, si, tout en tenant la touche A appuyée, l'utilisateur presse la touche B, la touche A n'aura alors plus d'effet. Un peu comme s'il ne pouvait y avoir qu'une touche à la fois!

    Par conséquent, il me faudrait une commande qui me permettrait de savoir quand je l'appelle si la touche ayant le code X est appuyée ou pas.

    Donc voilà, après mes longues mais claires (je l'espère) explications, j'implore votre aide pour me débloquer

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Il te faut utiliser onkeydown et onkeyup et maintenir toi-même un tableau
    des touches enfoncées. Ensuite tu consulte ce tableau pour savoir l'état des touches.

  3. #3
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    De plus, le problème avec ton timer, c'est que même si s'était possible, tu ne capterais pas les touches pressées dans l'intervale du timer, mais uniquement celle qui sont --miraculeusement-- pressé exactement au moment ou ton code serait exécuté.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Par défaut
    marcha, ton idée me paraît bonne donc je vais la tester et voir ce que ça donne.

    Sinon, FMaz, je réalise à l'instant le problème que tu avance, cependant ne penserais-tu pas que si je mets une période suffisamment courte voir même minimal (1 ms) ça pourrait tout de même marcher ? Car je suppose que quand on appuie sur une touche, même si on le fait rapidement, on reste dessus au moins 1 ms non ?

  5. #5
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Peut-être, mais peut-être pas.

    Ca deviens de la présomption plus qu'autre chose.
    Réalistement, 1ms, ca me parait effectivement possible, mais à mes oreille ce n'est simplement pas la bonne approche.

    Après 1ms, peut-être que tu va capter 99.999% des keystrokes
    mais c'est demandant pour l'appli, alors tu va peut-être mettre 10ms finalement, 10ms, tu va peut-être capter 99.98% des keystrokes
    mais, peut-être qu'avec 100ms...

    La barre est honnêtement impossible à tracer selon-moi.

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Worx241 Voir le message
    Sinon, FMaz, je réalise à l'instant le problème que tu avance, cependant ne penserais-tu pas que si je mets une période suffisamment courte voir même minimal (1 ms) ça pourrait tout de même marcher ? Car je suppose que quand on appuie sur une touche, même si on le fait rapidement, on reste dessus au moins 1 ms non ?
    Le problème qui se pose, c'est que les timers JavaScript (setTimeout et setInterval) ne sont réputés fiables qu'au-delà de 25ms (dans le meilleur des cas...).
    D'autre part avec cette méthode, tu surcharges inutilement le traitement.
    Enfin, pour ce qui est du setInterval, la durée passée en paramètre n'est enclenchée qu'à la fin de l'exécution du traitement à effectuer.

    Sans revenir bien sûr sur le postulat :
    Citation Envoyé par FMaz
    même si s'était possible
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. [Batch] Tester le caractère saisi au clavier
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 22/05/2025, 21h16
  2. [propertygrid] rend le champ non modifiable au clavier
    Par Vld44 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 29/09/2009, 15h15
  3. Tester la non existence d'un fichier
    Par Pharmacos dans le forum Débuter
    Réponses: 3
    Dernier message: 20/05/2008, 20h25
  4. lecture non bloquante de clavier
    Par Bayard dans le forum Général Python
    Réponses: 4
    Dernier message: 10/08/2007, 21h27
  5. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo