效果图:

(录制了视频演示,然而不会上传.....心塞.....)

本页面所在项目已上传GitHub,github下载地址:https://github.com/dan-Zd/car-vueapp     车牌键盘页面在 README.md有说明

代码部分:

车牌号输入框---html

<div class="content-car-number"><div class="car-content-title"><span>车牌号</span><label class="ze-checkbox"><input type="checkbox" v-model="checkbox" @change="carTypeChange"><span class="ze-checkbox-icon" style="width: 20px;height: 20px;color: rgb(76, 216, 100);"><i style="width: 6px;height: 12px;"></i></span><span class="ze-checkbox-text">新能源</span></label></div><div class="content-section"><div class="content-section-flex flex-card"><div class="content-section-flex flex-card-border"><button id="font" class="flex-btn" @click="btnClickYue" v-bind:class="{isClick: isYue }">{{areaName}}</button>           <span class="blank-border blank-border-first"></span><button id='letter' class="flex-btn" @click="btnClickA" v-bind:class="{isClick: isA}">{{areaLetter}}</button><div class="flex-mid"><span></span></div><div class="flex-btns"><button id='numOne' @click="btnClickNum('one')" v-bind:class="{isNumClick: isNumOne }">{{numOne}}</button><span class="blank-border"></span><button id='numTwo' @click="btnClickNum('two')" v-bind:class="{isNumClick: isNumTwo }">{{numTwo}}</button><span class="blank-border"></span><button id='numThree' @click="btnClickNum('three')" v-bind:class="{isNumClick: isNumThree }">{{numThree}}</button><span class="blank-border"></span><button id='numFour' @click="btnClickNum('four')" v-bind:class="{isNumClick: isNumFour }">{{numFour}}</button><span class="blank-border"></span><button id='numFive' @click="btnClickNum('five')" v-bind:class="{isNumClick: isNumFive }">{{numFive}}</button><span class="blank-border" v-if="checkbox"></span><button v-if="checkbox" id='numSix' @click="btnClickNum('six')" v-bind:class="{isNumClick: isNumSix }">{{numSix}}</button></div></div></div></div>
</div>                

键盘—html

<div class="keyboard" v-if="keyboardShow" :class='{animationDown:isDown,animationUp:isUp}'><button class="btn-complete" @click="completeClick"><span>完成</span></button><div v-if="keyboard == 'txt'"><div class="keyboard-row" v-for="(item,rows) in carTxt"><button class="keyboard-row-item" v-for="(i,index) in item.name" @click="btnWordClick(rows,index,i)">{{i}}</button></div><div class="keyboard-row"><!-- <div class="keyboard-row-items"> --><button class="keyboard-row-item bottom" @click="btnBottomClick('新')">新</button><button class="keyboard-row-item bottom" @click="btnBottomClick('临')">临</button><button v-for="j in noneBottomtxt" class="none-botton">{{j}}</button><div class="keyboard-row-item clear" @click="clearClick"><img src="../assets/icon_input_delete.png" alt="删除"></div><!-- </div> --></div></div><div v-if="keyboard == 'num'"><div class="keyboard-row" v-for="(item,rows) in carNum"><button :disabled="!isSelectl?isDisable && i<10 :isDisable&& rows!=0 " class="keyboard-row-item" v-for="(i,index) in item.name" @click="btnWordClick(rows,index,i)">{{i}}</button></div><div class="keyboard-row"><!-- <div class="keyboard-row-bottom"> --><button :disabled="isSelectl" v-for="item in carNumBottom" class="keyboard-row-item bottom" @click="btnBottomNumClick(item)">{{item}}</button><button v-for="j in noneBottom" class="none-botton">{{j}}</button><div class="keyboard-row-item clear" @click="clearClick"><img src="../assets/icon_input_delete.png" alt="删除"></div><!-- </div> --></div></div>
</div>

Css部分:

//车牌输入框
.content-car-number {padding: 64px 0 0;.car-content-title {display: flex;justify-content: space-between;padding: 0 32px;margin-bottom: 16px;span {font-size: 34px;}.ze-checkbox {display: flex;align-items: center;}.ze-radio-text {font-size: 28px;}.ze-checkbox-icon {color: #FFEDB1 !important;margin-right: 8px;}}.content-section {.content-section-flex {display: flex;justify-content: center;align-items: center;font-size: 40px;margin-bottom: 35px;.blank-border {height: 44px;width: 1px; /*no*/border-right: 1px solid #ddd; /*no*/margin-top: 27px;float: left;margin-left: -15px;z-index: 1;&.blank-border-first {margin-top: 0px;}}&.flex-card {color: #000;.flex-btn {width: 98px;height: 98px;border: none;text-align: center;background: #fff;font-size: 40px;color: #000;}.flex-btns {text-align: center;background: #fff;width: fit-content;position: relative;height: 98px;button {width: 98px;height: 98px;border: none;font-size: 40px;color: #000;border-radius: 50%;background: transparent;float: left;margin-left: -20px;z-index: 2;position: relative;&:first-child {margin-left: 0;}}}.flex-mid {margin: 0 0.1rem;span {display: block;width: 10px;height: 10px;border-radius: 50%;background: #ddd;}}.isClick {border: 1px solid #ffc200; /*no*/z-index: 50;border-radius: 8px;}.isNumClick {border-radius: 8px !important;border: 1px solid #ffc200 !important; /*no*/z-index: 10;background-color: #fff !important;}}.flex-card-border {border: 1px solid #ddd; /*no*/border-radius: 8px;}}}
}//键盘
.keyboard {width: 100%;height: 502px;position: fixed;bottom: -502px;background: #eeeeee;z-index: 10;&.animationDown {animation: slide_dowms 0.3s ease-out;animation-fill-mode: forwards;}&.animationUp {animation: slide_ups 0.3s ease-out;animation-fill-mode: forwards;}.btn-complete {height: 72px;text-align: right;color: #ffc200;font-size: 30px;width: 100%;background: #fff;border: none;border-top: 1px solid #eee;margin-bottom: 30px;span {margin-right: 30px;}}.keyboard-row {margin-top: 20px;display: flex;justify-content: space-between;padding: 0 8px;color: #333;&:first-child {margin-top: 0;}.keyboard-row-items {display: flex;justify-content: left;}.keyboard-row-bottom {display: flex;justify-content: space-between;}.keyboard-row-item {width: 66px;height: 80px;background: #fff;font-size: 34px;text-align: center;border: 1px solid #ccc; /*no*/border-radius: 10px;color: #333;&.bottom {height: 80px;width: 66px;line-height: 80px;background: #fff;color: #333;/*margin-right: 0.08rem;*/}&.clear {width: 140px;height: 80px;display: flex;align-items: center;justify-content: center;img {width: 62px;}}}.none-botton {border: none;height: 80px;width: 66px;visibility: hidden;}}button {&:active {background: #f4f4f4 !important;color: #999 !important;}}
}//键盘滑动
@keyframes slide_ups {from {bottom: -502px;}to {bottom: 0px;}
}
@keyframes slide_dowms {from {bottom: 0px;}to {bottom: -502px;}
}

javascript部分

data () { //有一些别的数据,实在懒得一一挑出来了return {toastTxt: '',isToastShow: false,isStr: '20px',isEnd: '300px',ispickerDateShow: '-400px',dateTitle: '开始',beginTimeVal: '',overTimeVal: '',isFeeHourClick: true,checkbox: false,isDown: false,isUp: false,selected: null,isSelectx: false,isSelectl: false,key: '1',areaName: '',areaLetter: '',numOne: '',numTwo: '',numThree: '',numFour: '',numFive: '',numSix: '',isYue: false,keyboardShow: false,keyboard: false,isA: false,isNumOne: false,isNumTwo: false,isNumThree: false,isNumFour: false,isNumFive: false,isNumSix: false,isDisable: false,carTxt: [{ name: ['粤', '京', '冀', '沪', '津', '晋', '蒙', '辽', '吉', '黑'] },{ name: ['苏', '浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘', '桂'] },{ name: ['琼', '渝', '川', '贵', '云', '藏', '陕', '甘', '青', '宁'] }],carNumBottom: ['W', 'X', 'Y', 'Z'],noneBottom: ['', '', '', ''],noneBottomtxt: ['', '', '', '', '', ''],carNum: [{ name: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] },{ name: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K'] },{ name: ['L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'] }],addedCarNum: ''}
},
watch: { checkbox: function (val, oldval) { //监听是否为新能源this.isNumOne = falsethis.isNumTwo = false
    this.isNumThree = falsethis.isNumFour = falsethis.isNumFive = falsethis.isNumSix = falseconst vm = thisif (!val) {// 切换到普通车牌if (vm.numFour) {vm.isNumFive = truevm.key = 7}} else {// 切换到新能源车牌if (vm.numFive) {vm.isNumSix = truevm.key = 8}}},numFive: function (val) { //监听是否为普通车牌最后一位if (!this.checkbox && val) {
      this.isUp = false
      this.isDown = truethis.keyboardShow = falsethis.isNumFive = false}},numSix: function (val) { //监听是否为新能源车牌最后一位
    if (this.checkbox && val) {this.isUp = falsethis.isDown = truethis.keyboardShow = falsethis.isNumSix = false}}
},
//methods
methods: {// 车牌类型切换carTypeChange (val) {this.isNumOne = false
    this.isNumTwo = false
    this.isNumThree = false
    this.isNumFour = falsethis.isNumFive = false
    this.isNumSix = falseif (!val) {// 切换到普通车牌if (this.numFour) {this.isNumFive = truethis.key = 7}} else {// 切换到新能源车牌if (this.numFive) {
        this.isNumSix = truethis.key = 8}}},// 车牌号第一位输入框选择
  btnClickYue () {
    this.isYue = truethis.isA = falsethis.isUp = truethis.isNumOne = falsethis.isNumTwo = false
    this.isNumThree = false
    this.isNumFour = false
    this.isNumFive = falsethis.isNumSix = falsethis.keyboardShow = truethis.keyboard = 'txt'this.key = 1},// 键盘选择显示btnWordClick (rows, index, i) {this.selected = iif (this.key === 1) {if (this.areaName === '临') {this.areaLetter = ''this.numOne = ''this.numTwo = ''
        this.numThree = ''this.numFour = ''this.numFive = ''this.numSix = ''}this.areaName = i
      this.isSelectl = falsedocument.getElementById('letter').click()} else if (this.key === 2) {this.areaLetter = idocument.getElementById('numOne').click()} else if (this.key === 3) {this.numOne = idocument.getElementById('numTwo').click()} else if (this.key === 4) {this.numTwo = idocument.getElementById('numThree').click()} else if (this.key === 5) {this.numThree = idocument.getElementById('numFour').click()} else if (this.key === 6) {this.numFour = idocument.getElementById('numFive').click()} else if (this.key === 7) {this.numFive = iif (this.checkbox) {document.getElementById('numSix').click()}} else if (this.key === 8) {this.numSix = i}if (this.key === 7 || this.key === 8) {this.carNumBottom = ['W', 'X', 'Y', 'Z', '港', '澳', '学']this.noneBottom = ['']} else if (this.key === 3 || this.key === 4 || this.key === 5 || this.key === 6) {this.carNumBottom = ['W', 'X', 'Y', 'Z']this.noneBottom = ['', '', '', '']}},// 车牌第一位选择‘临’,’新‘后的键盘显示btnBottomClick (val) {if (val === '新') {if (this.areaName === '临') {this.areaLetter = ''this.numOne = ''this.numTwo = ''this.numThree = ''this.numFour = ''this.numFive = ''this.numSix = ''}this.areaName = '新'this.isSelectx = truethis.isSelectl = falsedocument.getElementById('letter').click()} else if (val === '临') {this.areaName = '临'this.isSelectl = truethis.isSelectx = falsethis.isDisable = truethis.areaLetter = ''
      this.numOne = ''this.numTwo = ''
      this.numThree = ''this.numFour = ''this.numFive = ''this.numSix = ''document.getElementById('letter').click('isLin')}},// 键盘最后一行字母点击事件btnBottomNumClick (i) {this.selected = iif (this.key === 2) {this.areaLetter = idocument.getElementById('numOne').click()} else if (this.key === 3) {this.numOne = idocument.getElementById('numTwo').click()} else if (this.key === 4) {this.numTwo = idocument.getElementById('numThree').click()} else if (this.key === 5) {this.numThree = idocument.getElementById('numFour').click()} else if (this.key === 6) {this.numFour = idocument.getElementById('numFive').click()} else if (this.key === 7) {this.numFive = iif (this.checkbox) {document.getElementById('numSix').click()}} else if (this.key === 8) {this.numSix = i}},// 车牌号第二位输入框选择btnClickA () {this.isDisable = truethis.isA = truethis.isYue = falsethis.isUp = truethis.isNumOne = falsethis.isNumTwo = falsethis.isNumThree = falsethis.isNumFour = falsethis.isNumFive = falsethis.isNumSix = falsethis.keyboardShow = truethis.keyboard = 'num'this.key = 2},// 车牌号后五位或六位输入框选择btnClickNum (name) {if (this.isSelectl) {this.isDisable = true} else {this.isDisable = false}this.keyboard = 'num'this.keyboardShow = truethis.isYue = falsethis.isA = falsethis.isNumOne = falsethis.isNumTwo = falsethis.isNumThree = falsethis.isNumFour = falsethis.isNumFive = falsethis.isNumSix = falsethis.isUp = trueif (name === 'one') {this.isNumOne = truethis.key = 3} else if (name === 'two') {
      this.isNumTwo = truethis.key = 4} else if (name === 'three') {
      this.isNumThree = truethis.key = 5} else if (name === 'four') {this.isNumFour = truethis.key = 6} else if (name === 'five') {this.isNumFive = truethis.key = 7} else if (name === 'six') {this.isNumSix = truethis.key = 8}if (name === 'five' || name === 'six') {this.carNumBottom = ['W', 'X', 'Y', 'Z', '港', '澳', '学']this.noneBottom = ['']} else {this.carNumBottom = ['W', 'X', 'Y', 'Z']this.noneBottom = ['', '', '', '']}},// 键盘点击‘完成’completeClick () {this.isYue = falsethis.isA = falsethis.isNumOne = falsethis.isNumTwo = falsethis.isNumThree = falsethis.isNumFour = false
    this.isNumFive = falsethis.isNumSix = falsethis.isUp = falsethis.isDown = truethis.keyboardShow = false},// 键盘点击‘删除图标’clearClick () {if (this.key === 1) {this.areaName = ''} else if (this.key === 2) {document.getElementById('font').click()this.areaLetter = ''} else if (this.key === 3) {document.getElementById('letter').click()this.numOne = ''} else if (this.key === 4) {document.getElementById('numOne').click()this.numTwo = ''} else if (this.key === 5) {document.getElementById('numTwo').click()this.numThree = ''} else if (this.key === 6) {document.getElementById('numThree').click()this.numFour = ''} else if (this.key === 7) {document.getElementById('numFour').click()this.numFive = ''} else if (this.key === 8) {document.getElementById('numFive').click()this.numSix = ''}},addCar () {var myApp = new Framework7()var numvar str = document.getElementById('picker-str-date').value
    var end = document.getElementById('picker-end-date').value
    var bt = new Date(str.replace(/\-/g, '\/'))
    var et = new Date(end.replace(/\-/g, '\/'))if (!this.checkbox) {num = this.areaName   this.areaLetter   this.numOne   this.numTwo   this.numThree   this.numFour   this.numFive} else if (this.checkbox) {num = this.areaName   this.areaLetter   this.numOne   this.numTwo   this.numThree   this.numFour   this.numFive   this.numSix}if (num === '') {this.toastMessage('请输入车牌', 1000)} else if (!this.checkbox && (this.areaName === '' || this.areaLetter === '' || this.numOne === '' || this.numTwo === '' || this.numThree === '' || this.numFour === '' || this.numFive === '')) {this.toastMessage('请输入完整车牌', 1000)} else if (this.checkbox && (this.areaName === '' || this.areaLetter === '' || this.numOne === '' || this.numTwo === '' || this.numThree === '' || this.numFour === '' || this.numFive === '' || this.numSix === '')) {this.toastMessage('请输入完整车牌', 1000)} else if (str !== '' && end !== '' && bt >= et) {this.toastMessage('开始时间必须早于结束时间', 1000)} else {// const data = {// vehiclenum: num// }// this.$http.post(ADD_VEHICLE, data).then(res => {// if (res.data.ret === 0) {// this.addedCarNum = num// this.$router.push({name: 'AddSuccess', params: {addedCarNum: this.addedCarNum}})// } else {// this.$dialog.toast({mes:res.data.message,timeout:1200})// }// })}    }} 

更多专业前端知识,请上 【猿2048】www.mk2048.com

用vue写的移动端车牌号输入法相关推荐

  1. 通过自定义android键盘实现车牌号输入法

    前言 很多的移动应用中经常需要限定用户输入特定的字符,比如吱妇保,微信钱包等在输入支付密码的时候就是直接调出的纯数字键盘并且不允许用户切换为非数字键盘,这在一定程度上方便了前端数据校验同时也有很好的用 ...

  2. vue移动端车牌号输入键盘组件封装(支持新能源车牌和uniapp)

    一.效果图          二.说明 支持点击输入框删除或输入车牌,可直接在uniapp项目中运行,将view标签换为div.并且将rpx单位换成px可在vue项目里运行 三.代码 <temp ...

  3. 移动端车牌号键盘组件

    记录下小组件,方便日后用到 template <template><view class="main"><view class="title ...

  4. 【Android自定义View】车牌号输入法

    VehicleEditText Android用于车牌号输入的自定义键盘.仿"支付宝-车主服务-添加车辆-车牌号"输入框展示的车牌号输入键盘.以下是本作与支付宝的对比图: 一.效果 ...

  5. 使用HBuilder - wap2app 打包vue写的移动端项目 禁用原生标题栏

    解决方案 HBuilder将做的移动端打包成app. 在 sitemap.json 文件里 1.把global里的titleNView值设置为false 2.在sitemap.json的pages数组 ...

  6. 微信小程序 - 实现车牌输入功能,自定义车牌号输入法组件(键盘弹出后输入车牌号,可自定义各地区及界面样式)超详细注释组件插件示例源码

    效果图 本文实现了 输入车牌号码专用键盘组件,高效简洁无 BUG, 你可以直接复制组件源码,干净整洁的代码轻松移植到自己的项目中. 如下图所示,本文提供这样一个组件供你复制,快速完成功能. 组件源码 ...

  7. 如何写公式提取车牌号

    比如从下面的文字中提取车牌号,写公式=RegexString(B2,"([\u4e00-\u9fa5]{1,1}[A-Z0-9]{6,7})",1)即可 违法时间:2021年11月 ...

  8. vue 停车场车牌号键盘微信支付

    应公司要求现在需做某医院的停车厂微信公众号支付功能 前端框架 Vant https://youzan.github.io/vant/#/zh-CN/intro 预览demo:http://tangyu ...

  9. 用python写一个车牌号识别系统

    写车牌号识别系统需要用到计算机视觉技术,具体的实现方法如下: 图像预处理:对图像进行预处理,包括灰度化.二值化.边缘检测等,以得到图像中车牌的区域. 区域分割:对图像进行分割,得到车牌区域. 文字识别 ...

最新文章

  1. 1088 Rational Arithmetic
  2. 【Python基础】手把手教你数据可视化!(附实例讲解)
  3. C#模板设计模式使用和学习心得
  4. matlab输入数组出曲线,用鼠标画出曲线,并将曲线所经过的点保存到数组中
  5. 简单、易用的 MySQL 官方压测工具
  6. Yuhao and a Parenthesis
  7. vue-cli 相同页面的跳转,但路由参数不同的情况下 组件状态没有更新的问题是为什么 如何解决
  8. c#中contextMenuStrip与datagridview使用CellMouseDown事件及treeview使用mousedown事件
  9. 如何在ASP.NET Core中使用JSON Patch
  10. MySql 主从模式原理及操作步骤
  11. 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一
  12. 配置一台用于深度学习的个人工作站系统的实验记录[主机可以买现成的或自己配,裸机即可]
  13. 这一天,我用 Rust 重写了已有 19 年历史的 C++ 库!
  14. 用python写个小游戏难吗_小伙用Python制做一个小游戏,结果6秒就结束,怎么难玩?...
  15. 记一个win10删除恢复分区问题
  16. 超级经典回帖专用语(转载)
  17. java.lang.UnsupportedOperationException\r\n\tat java.sql.Date.toInstant(Date.java:304)
  18. 计算机考证忘记密码了怎么办,计算机忘记开机密码怎么办?
  19. 十年之痛解读日本房地产泡沫
  20. 学前端到了CSS阶段,你一定要掌握这9大防御式开发技能

热门文章

  1. BZOJ 1202-狡猾的商人(带权并查集)
  2. CCF真题 ISBN号码 题解
  3. 知三维空间中任意旋转抛物面的顶点和焦点坐标,建立该旋转抛物面方程
  4. 等待事件buffer busy waits
  5. 涂鸦智能设备接入homeassistant
  6. 全球及中国线性电位器行业研究及十四五规划分析报告
  7. Linux关机重启命令说明
  8. css3 字体自动换行第二行缩进一格
  9. firefox不兼容a标签文件下载
  10. Java分布式跟踪系统Zipkin(五):Brave源码分析-Brave和SpringMVC整合