xckeydown.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. let registerShortcuts = null
  2. const direction = ['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp']
  3. export const xcHotKey = (keyList) => {
  4. registerShortcuts = keyList
  5. document.onkeydown = function (event) {
  6. shortcutTrigger(event)
  7. }
  8. }
  9. export const logoutShortcut = () => {
  10. document.onkeydown = null
  11. registerShortcuts = null
  12. }
  13. /**
  14. * 快捷键触发事件
  15. * @param event
  16. */
  17. const shortcutTrigger = (event) => {
  18. for (let listKey in registerShortcuts) {
  19. let data = registerShortcuts[listKey]
  20. for (let key in data) {
  21. // 同时按下
  22. let pressSimultaneously = listKey + 'Key'
  23. if (event[pressSimultaneously] && event.key === key) {
  24. event.returnValue = false
  25. data[key]()
  26. return
  27. }
  28. if (key === 'direction') {
  29. if ((event[pressSimultaneously] && direction.includes(event.code))) {
  30. event.returnValue = false
  31. data['direction'](event.key)
  32. return
  33. }
  34. }
  35. if (key === 'number') {
  36. if (event[pressSimultaneously] && event.code === ('Digit' + event.key)) {
  37. event.returnValue = false
  38. data['number'](event.key)
  39. return
  40. }
  41. }
  42. }
  43. if (listKey === event.key) {
  44. event.returnValue = false
  45. registerShortcuts[listKey]()
  46. return
  47. }
  48. }
  49. }