--- category: Sensors --- # onKeyStroke Listen for keyboard keystrokes. ## Usage ```ts import { onKeyStroke } from '@vueuse/core'; onKeyStroke('ArrowDown', (e) => { e.preventDefault(); }); ``` See [this table](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values) for all key codes. ### Listen To Multiple Keys ```ts import { onKeyStroke } from '@vueuse/core'; onKeyStroke(['s', 'S', 'ArrowDown'], (e) => { e.preventDefault(); }); // listen to all keys by [true / skip the keyDefine] onKeyStroke(true, (e) => { e.preventDefault(); }); onKeyStroke((e) => { e.preventDefault(); }); ``` ### Custom Event Target ```ts import { onKeyStroke } from '@vueuse/core'; // ---cut--- onKeyStroke( 'A', (e) => { console.log('Key A pressed on document'); }, { target: document }, ); ``` ### Ignore Repeated Events The callback will trigger only once when pressing `A` and **hold down**. ```ts import { onKeyStroke } from '@vueuse/core'; // ---cut--- // use `autoRepeat` option onKeyStroke( 'A', (e) => { console.log('Key A pressed'); }, { dedupe: true }, ); ``` Reference: [KeyboardEvent.repeat](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat) ## Directive Usage ```vue ``` ### Custom Keyboard Event ```ts import { onKeyStroke } from '@vueuse/core'; // ---cut--- onKeyStroke( 'Shift', (e) => { console.log('Shift key up'); }, { eventName: 'keyup' }, ); ``` Or ```ts import { onKeyUp } from '@vueuse/core'; // ---cut--- onKeyUp('Shift', () => console.log('Shift key up')); ``` ## Shorthands - `onKeyDown` - alias for `onKeyStroke(key, handler, {eventName: 'keydown'})` - `onKeyPressed` - alias for `onKeyStroke(key, handler, {eventName: 'keypress'})` - `onKeyUp` - alias for `onKeyStroke(key, handler, {eventName: 'keyup'})` ## Type Declarations ```ts export type KeyPredicate = (event: KeyboardEvent) => boolean; export type KeyFilter = true | string | string[] | KeyPredicate; export type KeyStrokeEventName = 'keydown' | 'keypress' | 'keyup'; export interface OnKeyStrokeOptions { eventName?: KeyStrokeEventName; target?: MaybeRefOrGetter; passive?: boolean; /** * Set to `true` to ignore repeated events when the key is being held down. * * @default false */ dedupe?: MaybeRefOrGetter; } /** * Listen for keyboard keystrokes. * * @see https://vueuse.org/onKeyStroke */ export declare function onKeyStroke( key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions, ): () => void; export declare function onKeyStroke( handler: (event: KeyboardEvent) => void, options?: OnKeyStrokeOptions, ): () => void; /** * Listen to the keydown event of the given key. * * @see https://vueuse.org/onKeyStroke * @param key * @param handler * @param options */ export declare function onKeyDown( key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit, ): () => void; /** * Listen to the keypress event of the given key. * * @see https://vueuse.org/onKeyStroke * @param key * @param handler * @param options */ export declare function onKeyPressed( key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit, ): () => void; /** * Listen to the keyup event of the given key. * * @see https://vueuse.org/onKeyStroke * @param key * @param handler * @param options */ export declare function onKeyUp( key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit, ): () => void; ```