You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.1 KiB
						
					
					
				
								// #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
							 |