虚拟键盘的简单运用
数字与身份证键盘的使用,使用的类型type
有以下可选用:decimal
,integer
,phone
,idcard
npm的安装指令: npm install digital-keyboard
;
import '../css/digitalKeyboard.scss';
import DigitalKeyboard from 'digital-keyboard'; // 引用npm安装的digital-keyboard
// import DigitalKeyboard from './lib/Keyboard'; // 此引用的是在项目中放置压缩的js文件
const keyboardStr = `
<div id="kb__ct" class="kb__ct" style="display: none">
<div class="kb__bg"></div>
<div class="kb__el"></div>
</div>
`;
document.write(keyboardStr);
const $keyboardLayer = $('#kb__ct');
const $keyboardBg = $('.kb__bg');
// 当前键盘赋值元素选择器
let curValueElSel = '';
// 当前键盘赋值元素
let curValueEl = null;
// 当前键盘类型
let curType = '';
// 当前键盘
let curKeyboard = null;
$keyboardBg.click(() => $keyboardLayer.hide());
function initKeyboard({ valueEl, type = 'idcard', integerDigits = 4, decimalDigits = 2 }) {
curValueEl = document.querySelector(valueEl);
curValueElSel = valueEl;
curType = type;
// 固定键盘挂载元素
const element = document.querySelector('.kb__el');
element.innerHTML = '';
curKeyboard = new DigitalKeyboard({
el: element,
className: 'kb__main',
type, // 键盘类型:decimal小数,integer整数,phone手机号,idcard身份证
language: 'chinese',
inputValue: (value) => { // 键盘输入返回值
curValueEl.innerHTML = value;
},
integerDigits, // 限制整数位数
decimalDigits, // 限制小数位数
});
}
export function openKeyboard({ valueEl, type = 'idcard', className, integerDigits = 4, decimalDigits = 2 }) {
$keyboardLayer.show();
// 键盘类型不同,需重新初始化键盘
if (type !== curType) {
initKeyboard({ valueEl, type, className, integerDigits, decimalDigits });
} else if (curValueElSel !== valueEl) {
// 仅更改赋值元素
curValueElSel = valueEl;
curValueEl = document.querySelector(valueEl);
}
// 继续上次编辑
curKeyboard.value = curValueEl.innerHTML;
}
css的文件引用
.kb__ct {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 999;
display: flex;
flex-direction: column;
animation: fadeInUp .3s linear forwards;
.kb__bg {
flex: 1;
box-shadow: inset 0 -0.1rem .1rem rgba(136, 136, 136, 0.3);
}
.kb__main {
font-size: 15px;
}
}
@-webkit-keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@keyframes fadeInUp {
0% {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
100% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
使用:
// 点击该元素时,弹出input的弹窗内容
that.$('#code_idCard').click(() => openKeyboard({ valueEl: '#code_idCard'}));