Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2011, 17h57   #1
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 0
Points : 0
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 !
Supertoaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 18h05   #2
Membre Expert
 
Avatar de supersnail
 
Homme
Inscription : novembre 2006
Messages : 1 402
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 1 402
Points : 1 991
Points : 1 991
Bonjour,

Tu peux rajouter un à la fin de ta fonction qui gère l'évènement clavier.
__________________
Toute question technique envoyée en MP ira directement à la poubelle

Un code ne marchera jamais,il n'a jamais reçu la capacité de se déplacer.
Inutile donc de dire "ça marche pas", donnez plûtot des informations précises afin de mieux pouvoir vous aider.


Grand gourou de la -attitude - Sauvons Internet!
supersnail est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 18h11   #3
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 0
Points : 0
Merci ! Je l'ajoute comme ceci ?

Code :
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 ?
Supertoaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 18h13   #4
Membre Expert
 
Avatar de supersnail
 
Homme
Inscription : novembre 2006
Messages : 1 402
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 1 402
Points : 1 991
Points : 1 991
Avec
Code :
addListener(document, "keydown", function(e) { This.keyPress(This,e);return false;});
, ça donne quoi?
__________________
Toute question technique envoyée en MP ira directement à la poubelle

Un code ne marchera jamais,il n'a jamais reçu la capacité de se déplacer.
Inutile donc de dire "ça marche pas", donnez plûtot des informations précises afin de mieux pouvoir vous aider.


Grand gourou de la -attitude - Sauvons Internet!
supersnail est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 18h18   #5
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 0
Points : 0
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 ?
Supertoaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2011, 19h45   #6
Modérateur
 
Avatar de NoSmoking
 
Homme
Inscription : janvier 2011
Messages : 2 933
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2011
Messages : 2 933
Points : 4 756
Points : 4 756
Bonjour,
il faut éviter que l'événement ne se propage
donc ajouter en fin de fonction un truc du style
Code :
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]
NoSmoking est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h31.


 
 
 
 
Partenaires

Hébergement Web