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
 |