[+] Encapsulate key bind vue

This commit is contained in:
Hykilpikonna
2021-12-11 18:45:08 -05:00
parent 7551ee8c05
commit 740a7d00c4
+38
View File
@@ -1,3 +1,6 @@
import {Options, Vue} from "vue-class-component";
import {withKeys} from "vue";
/**
* Same as python's range
*
@@ -32,3 +35,38 @@ export function minMax(val: number, min: number, max: number): number
{
return val > max ? max : val < min ? min: val
}
/**
* Keybinds[key string] = (event) => Prevent default or not (Default: true)
*/
export type Keybinds = {[id: string]: (e: KeyboardEvent) => unknown}
/**
* Key handler mixin
*/
export class KeyHandler extends Vue
{
keybinds?: Keybinds
mounted(): void
{
document.addEventListener('keydown', this.keyListener)
}
unmounted(): void
{
document.removeEventListener('keydown', this.keyListener)
}
keyListener(e: KeyboardEvent): void
{
if (!this.keybinds) return
if (e.key in this.keybinds)
{
if (this.keybinds[e.key](e) !== false)
{
e.preventDefault()
}
}
}
}