46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// #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
 |