Vue使用虛擬鍵盤及中英文切換功能
更新時間:2023年06月29日 16:06:50 作者:惟愿君安
這篇文章主要給大家介紹了關(guān)于Vue使用虛擬鍵盤及中英文切換的相關(guān)資料,有時候在大型觸屏設(shè)備(如雙屏設(shè)備)中往往就沒有鍵盤去操作,所以就需要去建立一個虛擬鍵盤去操作,需要的朋友可以參考下
1.安裝依賴
npm install simple-keyboard --save npm install simple-keyboard-layouts --save
2.虛擬鍵盤組件
simpleKeyboard.vue
<template> <div :class="keyboardClass"></div> </template> <script> import Keyboard from 'simple-keyboard' import 'simple-keyboard/build/css/index.css' import layout from 'simple-keyboard-layouts/build/layouts/chinese' // 中文輸入法 export default { name: 'SimpleKeyboard', props: { keyboardClass: { default: 'simple-keyboard', type: String, }, input: { default: '', }, maxLength: { default: '' }, }, data: () => ({ keyboard: null, displayDefault: { '{bksp}': 'backspace', '{lock}': 'caps', '{enter}': '> enter', '{tab}': 'tab', '{shift}': 'shift', '{change}': '中文', '{space}': ' ', '{clear}': '清空', '{close}': '關(guān)閉', }, }), mounted() { this.keyboard = new Keyboard(this.keyboardClass, { onChange: this.onChange, onKeyPress: this.onKeyPress, layoutCandidates: layout.layoutCandidates, layout: { // 默認(rèn)布局 default: [ '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}', '{tab} q w e r t y u i o p [ ] \\', "{lock} a s d f g h j k l ; ' {enter}", '{shift} z x c v b n m , . / {clear}', '{change} {space} {close}', ], // shift布局 shift: [ '~ ! @ # $ % ^ & * ( ) _ + {bksp}', '{tab} Q W E R T Y U I O P { } |', '{lock} A S D F G H J K L : " {enter}', '{shift} Z X C V B N M < > ? {clear}', '{change} {space} {close}', ], }, // 按鈕展示文字 display: this.displayDefault, // 按鈕樣式 buttonTheme: [ { class: 'hg-red close', buttons: '{close}', }, { class: 'change', buttons: '{change}', }, ], // 輸入限制長度 maxLength: this.maxLength, }) }, methods: { onChange(input) { this.keyboard.setInput(input) this.$emit('onChange', input) }, // 點擊鍵盤 onKeyPress(button, $event) { console.log(button) // 點擊關(guān)閉 if (button === '{close}') { // let keyboard = $event.path[3] // 子組件調(diào)用父組件的關(guān)閉按鈕方法 this.$parent.closekeyboard() // keyboard.style.visibility = 'hidden' return false } else if (button === '{change}') { // 切換中英文輸入法 if (this.keyboard.options.layoutCandidates !== null) { this.$set(this.displayDefault, '{change}', '英文') // 切換至英文 this.keyboard.setOptions({ layoutCandidates: null, display: this.displayDefault, }) } else { // 切換至中文 this.$set(this.displayDefault, '{change}', '中文') this.keyboard.setOptions({ layoutCandidates: layout.layoutCandidates, display: this.displayDefault, }) } } else if (button === '{clear}') { this.keyboard.clearInput() } else { let value = $event.target.offsetParent.parentElement.children[0].children[0].value // 輸入框有默認(rèn)值時,覆寫 if (value) { this.keyboard.setInput(value) } this.$emit('onKeyPress', button) } if (button === '{shift}' || button === '{lock}') this.handleShift() }, // 切換shift/默認(rèn)布局 handleShift() { let currentLayout = this.keyboard.options.layoutName let shiftToggle = currentLayout === 'default' ? 'shift' : 'default' this.keyboard.setOptions({ layoutName: shiftToggle, }) }, }, watch: { input(input) { this.keyboard.setInput(input) }, }, } </script> <style lang="less"> @deep: ~'>>>'; .hg-theme-default { width: 70%; .hg-button { &.hg-red { background: #db3e5d; color: white; &.close { max-width: 200px; } } &.change { max-width: 200px; } } } </style>
3.使用虛擬鍵盤
<el-input v-model="toolParameter.latheNumber" @focus="onInputFocus('latheNumber')"> </el-input> <el-input v-model="toolParameter.tid" @focus="onInputFocus('tid')" placeholder=""> </el-input> <div v-show="showKeyboard"> <SimpleKeyboard ref="SimpleKeyboard" @onChange="onChangeKeyboard" /> </div>
import SimpleKeyboard from '../../components/simpleKeyboard.vue' export default { name: 'Home', components: { SimpleKeyboard, }, data() { return { showKeyboard: false, //鍵盤默認(rèn)隱藏 changeIpt:'',//選擇了哪個輸入框 } }, methods:{ // inpuit獲取焦點顯示虛擬鍵盤 onInputFocus(res) { this.showKeyboard = true this.changeIpt = res // 父組件調(diào)用子組件的方法 this.$refs.SimpleKeyboard.onKeyPress('{clear}') }, // 給輸入框賦值 onChangeKeyboard(input) { if (this.changeIpt == 'latheNumber') { this.toolParameter.latheNumber = input } else if (this.changeIpt == 'tid') { this.toolParameter.tid = input } }, // 點擊關(guān)閉隱藏鍵盤 closekeyboard() { this.showKeyboard = false }, } }
// 鍵盤樣式 .simple-keyboard { position: absolute; bottom: 0; left: 5%; width: 90%; color: #000; z-index: 999999999; }
總結(jié)
到此這篇關(guān)于Vue使用虛擬鍵盤及中英文切換的文章就介紹到這了,更多相關(guān)Vue使用虛擬鍵盤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vuejs2.0運用原生js實現(xiàn)簡單的拖拽元素功能示例
本篇文章主要介紹了vuejs2.0運用原生js實現(xiàn)簡單的拖拽元素功能示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02Vue3?watchEffect的使用教程和相關(guān)概念
Vue?3?引入了?Composition?API,其中?watchEffect?是一個非常強大的工具,用于響應(yīng)式地追蹤依賴項的變化,本文將詳細介紹?watchEffect?的使用方法和相關(guān)概念,文中有詳細的代碼供大家參考,需要的朋友可以參考下2024-08-08Vue?3?使用moment設(shè)置顯示時間格式的問題及解決方法
在Vue?3中,因為過濾器(filter)已經(jīng)被廢棄,取而代之的是全局方法(global?method),本文給大家介紹Vue?3?使用moment設(shè)置顯示時間格式的問題及解決方法,感興趣的朋友一起看看吧2023-12-12