2016-02-02 26 views
19

Ich versuche einen Weg zu finden, einen Tastendruck zu simulieren.Wie kann ich einen Tastendruck in JavaScript simulieren?

Zum Beispiel, wenn Funktion gestartet wird, sollte die Taste "Pfeil nach unten" gedrückt werden, und so sollte die Webseite leicht gescrollt werden.

Ich bin nur in Chrome interessiert, und sowohl jQuery oder plain JS wird angemessen sein. (Plain JS wird mehr vorzuziehen sein).

, dass eines der Code-Beispiele, das ich versucht:

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? 

Ich suchte und fand die folgenden verwandten Fragen, aber die Lösungen nicht funktioniert für mich:


Mit anderen Worten

Mit AutoHotkey, können Sie einfach so etwas wie machen:

Down:: 
Send, {Up} 

Wenn Sie dann die Pfeiltaste Down drücken, wird Up ausgelöst. Ich möchte es nur mit JS implementieren.

+0

Das hört sich vielleicht albern an, aber haben Sie 'jQuery' in Ihr' HTML' importiert? – AMACB

+10

AFAIK, das ein Keydown-Ereignis auslöst, wird nur alle Keydown-Handler verarbeiten lassen. Sie können den Browser nicht wirklich scrollen lassen, da das Scrollen nicht durch ein JavaScript-Keydown-Ereignis erfolgt. Warum können Sie das Dokument nicht direkt scrollen, indem Sie 'scrollTop' verwenden? – Amadan

+0

können Sie eine jfiddle erstellen? –

Antwort

6

Wie @rfsbsb wies darauf hin aus: Jquery script for simulated key press down not running keyboard shortcut

Wenn Sie versuchen, einige Browser oder systemweite Tastenkombination zu feuern dann ein es ist Sackgasse - das kann aus Sicherheitsgründen nicht gemacht werden. Wenn es möglich wäre, würden Sie Seiten über das Internet haben, die (zum Beispiel) sich Ihren Bookmarks hinzufügen würden, ohne sogar zu fragen (indem Sie STRG + B Abkürzung mit Javascript abfeuern).

5

Mit this answer, ich habe es geschafft, den Code ein wenig zu ändern, und ich glaube, ich habe bekommen, was Sie suchen?

here is my 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); 
2

Hier ist eine Probe ausgehend von @ Haring10 dem Beispiel:

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

Auslösen keydown-keyup-keypress programmatisch scheint nicht das EFFEKT Scrollen zu haben. Das obige Beispiel kann angepasst werden, um Animationen hinzuzufügen.

Verwandte Themen