web-dev-qa-db-fra.com

Comment puis-je simuler une pression de touche en JavaScript?

J'essaie de trouver un moyen de simuler une pression sur une touche.

Par exemple, lorsque la fonction est lancée, il faut appuyer sur la touche "Flèche vers le bas" et faire défiler légèrement la page Web.

Je ne m'intéresse qu'à Chrome, et jQuery ou JS simple seront appropriés. (JS simple sera plus préférable).

C'est l'un des exemples de code que j'ai essayés:

var e = $.Event("keydown", { keyCode: 40}); // 40 = down arrow
$("body").trigger(e);
// When I launch it the console, nothing happens. The page is not scrolled.
// May be I missed some obvious?

J'ai cherché et trouvé les questions connexes suivantes, mais les solutions n'ont pas fonctionné pour moi:


En d'autres termes

En utilisant AutoHotkey, vous pouvez facilement créer quelque chose comme:

Down::
Send, {Up}

Ensuite, si vous appuyez sur la touche de navigation Down, elle sera déclenchée Up. Je veux juste l'implémenter avec JS.

20
jsv

Comme @rfsbsb l'a souligné à partir de: Le script JQuery pour la touche simulée n'appuie pas sur le raccourci clavier

Si vous essayez d'activer un raccourci clavier pour votre navigateur ou pour l'ensemble du système alors c'est une impasse - cela ne peut pas être fait pour des raisons de sécurité. Si ça serait possible, vous auriez des pages partout sur Internet qui (par exemple) s’ajouterait à vos favoris sans même demander (en activant le raccourci CTRL + B avec Javascript).

7
Gavriel

En utilisant cette réponse , j’ai réussi à changer un peu le code et je pense avoir obtenu ce que vous cherchez?

voici mon jsfiddle

Code:

jQuery(document).ready(function($) {
    $('body').keypress(function(e) {
        if(e.which == '40') 
            $('body').animate({scrollTop: '100px'});
    });
});
jQuery.fn.simulateKeyPress = function(character) {
    jQuery(this).trigger({
        type: 'keypress',
        which: character
    });
};

 setTimeout(function() {
    $('body').simulateKeyPress(40);
 }, 1000);
5
Haring10

Voici un exemple à partir de l'exemple de @ Haring10:

https://jsfiddle.net/po33vfb4/4/

$('body').keydown(function(e) {
  e.preventDefault();
  e.stopImmediatePropagation();

  if(e.which == 40) {
    window.scrollBy(0, -100);
  } else {
    window.scrollBy(0, 100);
  }
});

Déclencher keydown-keyup-keyper par programmation ne semble pas avoir l'effet de défilement. L'exemple ci-dessus peut être personnalisé pour ajouter des animations.

2
Doru Pîrvu