xckeydown.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {Ref, ref} from 'vue'
  2. import {ElMessage} from "element-plus";
  3. const direction: string[] = ['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp']
  4. export const xcEvent: Ref<Event | null> = ref(null)
  5. document.onkeydown = function (event: KeyboardEvent): void {
  6. xcEvent.value = event
  7. }
  8. const preventDefault = (event: Event) => {
  9. event.returnValue = false;
  10. try {
  11. event.preventDefault();
  12. } catch {
  13. }
  14. }
  15. export const shortcutTrigger = (event, registerShortcuts, disabled = false) => {
  16. for (let listKey in registerShortcuts) {
  17. let data = registerShortcuts[listKey]
  18. for (let key in data) {
  19. // 同时按下
  20. let pressSimultaneously = listKey + 'Key'
  21. if (event[pressSimultaneously] && event.key === key) {
  22. preventDefault(event)
  23. if (whetherToDisable(disabled)) return;
  24. data[key]()
  25. return
  26. }
  27. if (key === 'direction') {
  28. if ((event[pressSimultaneously] && direction.includes(event.code))) {
  29. preventDefault(event)
  30. if (whetherToDisable(disabled)) return;
  31. data['direction'](event.key)
  32. return
  33. }
  34. }
  35. if (key === 'number') {
  36. if (event[pressSimultaneously] && event.code === ('Digit' + event.key)) {
  37. preventDefault(event)
  38. if (whetherToDisable(disabled)) return;
  39. data['number'](event.key)
  40. return
  41. }
  42. }
  43. }
  44. if (listKey === event.key) {
  45. preventDefault(event)
  46. if (whetherToDisable()) return;
  47. registerShortcuts[listKey]()
  48. return
  49. }
  50. }
  51. }
  52. function whetherToDisable(disabled = false) {
  53. // 这个打开是时候是不触发
  54. if (disabled) {
  55. ElMessage({
  56. message: '当前快捷键无法使用',
  57. type: 'warning',
  58. showClose: true,
  59. grouping: true,
  60. })
  61. }
  62. return disabled
  63. }