2016-02-02 19 views
19

Sto cercando di trovare un modo per simulare un keypress.Come posso simulare una pressione di un tasto in JavaScript?

Ad esempio, quando viene avviata la funzione, il tasto "Freccia in basso" deve essere premuto, quindi la pagina Web deve essere leggermente spostata.

Sono interessato solo a Chrome, e sia jQuery che JS semplice saranno appropriati. (Plain JS sarà più preferibile).

Questo è uno degli esempi di codice che ho provato:

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? 

Ho cercato e trovato le seguenti domande correlate, ma le soluzioni non ha funzionato per me:


In altre parole

Utilizzando AutoHotkey, si può facilmente fare qualcosa di simile:

Down:: 
Send, {Up} 

Quindi, se si preme il tasto di direzione Down, verrà attivato Up. Voglio solo implementarlo con JS.

+0

Questo potrebbe sembrare sciocco, ma hai importato 'jQuery' nel tuo' HTML'? – AMACB

+10

L'attivazione di un evento keydown da parte di AFAIK comporterà l'elaborazione di qualsiasi gestore di keydown. Non è possibile far scorrere il browser, poiché lo scorrimento non viene eseguito da un evento keydown JavaScript. Perché non puoi scorrere il documento direttamente usando la manipolazione 'scrollTop'? – Amadan

+0

puoi creare un jsfiddle? –

risposta

6

Come @rfsbsb rilevare da: Jquery script for simulated key press down not running keyboard shortcut

Se stai cercando di sparare alcuni browser o sistema tastiera ampia scelta rapida poi è un vicolo cieco - non può essere fatto per ragioni di sicurezza. Se fosse , avresti pagine in tutto il mondo che (ad esempio) si aggiungerebbero ai tuoi segnalibri senza nemmeno chiedere (attivando la scorciatoia CTRL + B usando Javascript).

5

Utilizzando this answer, sono riuscito a cambiare il codice un po 'e penso di aver ottenuto quello che stavi cercando?

here is my jsfiddle

Codice:

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

Ecco un esempio partendo da @ esempio di 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); 
    } 
}); 

Triggering keydown-keyup-pressione di un tasto programatically non sembrano avere l'EFF di scorrimento. L'esempio sopra può essere personalizzato per aggiungere animazioni.