2009-06-29 7 views
33

Dal momento che sto usando jQuery, qualsiasi soluzione tramite quella funzionerebbe anche. Idealmente, mi piacerebbe sapere entrambi, però.Come impedire lo scorrimento con i tasti freccia ma NON il mouse?

Ho già i tasti freccia legati a un'altra funzione sulla mia pagina (usando jQuery), ma averli causano nella pagina per scorrere in aggiunta a ciò, mi provoca problemi.

forse ho conosciuto questo in una sola volta, ma non mi ricordo più.

+0

È estremamente grave la progettazione dell'interfaccia utente per impedire ai tasti della tastiera di scorrere la cornice attiva. Io (e molte altre persone) navigo principalmente con i tasti ed è molto frustrante dover usare il mouse sulla pagina dispari qua e là che blocca la corretta navigazione della tastiera. Certo, ci sono probabilmente validi motivi per farlo, ma dovresti assicurarti che il tuo sia uno di questi. –

+16

Lo è. La mia applicazione web è un editor; non una pagina web formale. –

+4

Concordo pienamente sul fatto che sia una cattiva progettazione dell'interfaccia utente per impedire sempre il comportamento standard del browser. Ma è del tutto bello farlo in determinate situazioni, imho. Nel mio caso, ne ho bisogno per impedire alla pagina di scorrere quando l'utente fa un passo tra le alternative in un elenco. Quando l'attenzione è all'esterno dell'elenco, la pagina scorrerà normalmente. All'interno dell'elenco, la pagina eviterà lo scorrimento, a meno che non sia necessario per visualizzare l'elemento selezionato. –

risposta

75

Aggiunta livello di documento gestore pressione di un tasto fa il trucco!

var ar=new Array(33,34,35,36,37,38,39,40); 

$(document).keydown(function(e) { 
    var key = e.which; 
     //console.log(key); 
     //if(key==35 || key == 36 || key == 37 || key == 39) 
     if($.inArray(key,ar) > -1) { 
      e.preventDefault(); 
      return false; 
     } 
     return true; 
}); 
+0

Oh, pulito. Fammi dare un colpo ... –

+7

Gestisce PgUp (33), PgDn (34), Fine (35), Home (36), Sinistra (37), Su (38), Destra (39), Giù (40) – TheVillageIdiot

+0

Yay! Molte grazie. –

1

Se si aggiunge un gestore di livello pressione del tasto documento che impedirà il normale scorrimento della pagina in qualsiasi momento, non solo quando il vostro elemento ha il focus, questo potrebbe essere un effetto indesiderato.

2

In alcune circostanze, ad esempio. quando non hai un elemento su cui focalizzare l'attenzione, solo un'area che dovevi fare clic, potresti non avere troppo controllo sul gestore e impedire che l'evento a livello globale possa essere un po 'instabile nella migliore delle ipotesi (come ho trovato fuori nel modo più duro).

La soluzione più semplice in questi casi è quello di legare sul click anche del pulsante di controllo e concentrarsi su un elemento di input vuoto che si posiziona -9000px a sinistra.

È quindi possibile bloccare in modo affidabile l'evento tramite keydown e inoltre non preoccuparsi di bloccare il comportamento predefinito o altri listener globali poiché il comportamento predefinito sull'elemento di input sposta semplicemente il cursore a sinistra ea destra.

Problemi correlati