2016-02-02 12 views
19

Próbuję znaleźć sposób na symulowanie naciśnięcia klawisza.Jak mogę symulować naciśnięcie klawisza w JavaScript?

Na przykład, po uruchomieniu funkcji należy nacisnąć klawisz "Strzałka w dół", aby strona była lekko przewijana.

Jestem zainteresowany tylko Chrome i zarówno jQuery, jak i zwykły JS będą odpowiednie. (Zwyklejszy JS będzie bardziej preferowany).

To jeden z przykładów kodu próbowałem:

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? 

ja szukałem i znalazłem następujące pytania związane, ale rozwiązania nie działa dla mnie:


Innymi słowy

Korzystanie AutoHotkey, można łatwo zrobić coś takiego:

Down:: 
Send, {Up} 

Następnie, jeśli naciśniesz przycisk strzałki Down, zostanie wyzwolony Up. Chcę go zaimplementować z JS.

+0

Może to zabrzmieć głupio, ale czy importowałeś 'jQuery' w swoim" HTML "? – AMACB

+10

AFAIK wywołujący zdarzenie keydown spowoduje, że wszystkie manipulatory keydown będą przetwarzane. W rzeczywistości nie można przewijać przeglądarki, ponieważ przewijanie nie jest wykonywane przez zdarzenie keydown w języku JavaScript. Dlaczego nie możesz bezpośrednio przewijać dokumentu za pomocą manipulacji 'scrollTop'? – Amadan

+0

można utworzyć jsfiddle? –

Odpowiedz

6

Jak @rfsbsb wskazał od: Jquery script for simulated key press down not running keyboard shortcut

Jeśli próbujesz odpalić jakąś przeglądarkę lub system szeroko skrótu klawiaturowego to jest to ślepy zaułek - nie można tego zrobić ze względów bezpieczeństwa. Gdyby było to możliwe, strony byłyby dostępne w Internecie, dzięki czemu (na przykład) dodawałoby się do twoich zakładek nawet nie pytając (przez wypalanie skrótu CTRL + B za pomocą Javascript).

5

Za pomocą this answer, udało mi się trochę zmienić kod i myślę, że dostałem to, czego szukasz?

here is my jsfiddle

Kod:

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); 
2

Oto przykład zaczynając od @ przykład Haring10 za:

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); 
    } 
}); 

Wyzwalanie keyDown-keyup-przyciśnięcie programowo wydaje się nie mieć efect przewijania. Powyższą próbkę można dostosować w celu dodania animacji.