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 :

Capture de touches


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut Capture de touches
    Bonjour à tous,

    Je suis en train de développer une petite application JS, dans un canvas ; c'est un jeu dans lequel un personnage est contrôlé par les touches directionnelles du clavier.
    Seulement voilà, la page étant trop grande pour être affichée dans son intégralité, un appui sur les touches haut ou bas provoque en même temps le défilement de la page, ce qui devient agaçant à la longue. Auriez-vous une idée de la façon dont je pourrais m'y prendre, pour empêcher ces touches d'avoir un autre effet que de diriger le personnage ?

    Je vous remercie à l'avance pour vos précieuses réponses !

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Tu peux rajouter un à la fin de ta fonction qui gère l'évènement clavier.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Merci ! Je l'ajoute comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function Personnage(...) {...
     
    this.keyPress = function (_this,e) {
            switch(e.keyCode){
                case left:
                    _this.setDirection(1);
                    break;
                case up:
                    _this.setDirection(2);
                    break;
                case right:
                    _this.setDirection(3);
                    break;
                case down:
                    _this.setDirection(4);
                    break;
                default:
                    break;
            }
            return false;
        }
     
        var This = this;
        addListener(document, "keydown", function(e) { This.keyPress(This,e);});
     
    }
    J'ai une sous-classe Personnage, dans laquelle j'ai rajouté un listener que va décortiquer la fonction "keypress".

    J'ai rajouté cette ligne, mais la page s'agite toujours... Une idée ?

  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addListener(document, "keydown", function(e) { This.keyPress(This,e);return false;});
    , ça donne quoi?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Flûte... Ça défile toujours. Que ce soit dans la fonction à l'intérieur du addListener, dans la fonction addListener elle-même ou dans la fonction keypress, l'ajout de "return false" à la fin ne change rien.
    A quel niveau les touches directionnelles sont-elles interprétées par le navigateur, pour le défilement ? Avant ou après l'event ?

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    il faut éviter que l'événement ne se propage
    donc ajouter en fin de fonction un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if( event.preventDefault){
        event.preventDefault();
        event.stopPropagation();
      }
      else{
        event.returnValue = false;
        event.cancelBubble = true;
      }
    [edit]
    perso j'utiliserai keypress avec event.keyCode
    [/edit]

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/02/2007, 16h21
  2. "capturer" une touche du clavier
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/12/2006, 09h41
  3. Couleurs et capture de touches.
    Par TeKa dans le forum C
    Réponses: 4
    Dernier message: 07/12/2005, 17h24
  4. [JEditorPane]Captures des touches claviers
    Par splend_f dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 17/05/2004, 14h57
  5. [VB6] capture de touche par API
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/11/2003, 15h18

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