Blame view

uni_modules/uni-popup/components/uni-popup-dialog/keypress.js 1.08 KB
4b045f7c   刘淇   江阴初始化项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  // #ifdef H5
  export default {
    name: 'Keypress',
    props: {
      disable: {
        type: Boolean,
        default: false
      }
    },
    mounted () {
      const keyNames = {
        esc: ['Esc', 'Escape'],
        tab: 'Tab',
        enter: 'Enter',
        space: [' ', 'Spacebar'],
        up: ['Up', 'ArrowUp'],
        left: ['Left', 'ArrowLeft'],
        right: ['Right', 'ArrowRight'],
        down: ['Down', 'ArrowDown'],
        delete: ['Backspace', 'Delete', 'Del']
      }
      const listener = ($event) => {
        if (this.disable) {
          return
        }
        const keyName = Object.keys(keyNames).find(key => {
          const keyName = $event.key
          const value = keyNames[key]
          return value === keyName || (Array.isArray(value) && value.includes(keyName))
        })
        if (keyName) {
          // 避免和其他按键事件冲突
          setTimeout(() => {
            this.$emit(keyName, {})
          }, 0)
        }
      }
      document.addEventListener('keyup', listener)
      this.$once('hook:beforeDestroy', () => {
        document.removeEventListener('keyup', listener)
      })
    },
  	render: () => {}
  }
  // #endif