当前位置: 首页 > news >正文

vue,H5车牌弹框定制键盘包括新能源车牌

1.车牌展示div

<div class="carDiv"><div class='carTitle'><span>*</span>车牌号</div><div class="car-num-input"><div v-for="(item,index) in carNumList" :key="index" @click.stop="selectCarNum(index)":class="(carIndex == index ? 'active' : '') + ' ' + (item ? 'status-key' : '')">{{ index == 0 && !item ? '省' : index == carNumList.length-1 && !item ? '新能源' : item }}</div></div>
</div>

2.车牌弹框键盘

<van-popup v-model="keyboardShow" position="bottom" round :overlay="true" :close-on-click-overlay="false"><div class="keyboard-layer"><div class="keyboard-header"><span @click="keyboardShow = false">完成</span></div><!-- 省份键盘 --><div class="province-layer" v-if="carIndex == '0'"><span v-for="(item,index) in provinceList" :key="index" @click="keyboardBtn(item)":class="activeKey == item ? 'active-hover' : ''">{{ item == 'del' ? '删除' : item }}</span></div><!-- 数字字母键盘 --><div class="keyboard-item" v-if="carIndex != '0'"><div v-if="carIndex != '1'"><span v-for="(item,index) in keyboardList[0]" :key="index" @click="keyboardBtn(item)":class="activeKey == item ? 'active-hover' : ''">{{ item }}</span></div><div><span v-for="(item,index) in keyboardList[1]" :key="index" @click="keyboardBtn(item)":class="((item == 'O' && carIndex != '1') ? 'no-btn' : '') + ' ' + (activeKey == item ? 'active-hover' : '')">{{ item }}</span></div><div><span v-for="(item,index) in keyboardList[2]" :key="index" @click="keyboardBtn(item)":class="activeKey == item ? 'active-hover' : ''">{{ item }}</span></div><div><span v-for="(item,index) in keyboardList[3]" :key="index" @click="keyboardBtn(item)":class="activeKey == item ? 'active-hover' : ''">{{ item == 'del' ? '删除' : item }}</span></div><div v-if="carIndex == carNumList.length-2"><span v-for="(item,index) in keyboardList[4]" :key="index" @click="keyboardBtn(item)":class="activeKey == item ? 'active-hover' : ''">{{ item }}</span></div></div></div>
</van-popup>

data

addShow: false, // 添加车辆弹窗显示隐藏
number:'',
carNumList: ['', '', '', '', '', '', '', ''], // 车牌号数组
activeKey: '', // 键盘按键选中激活
timeoutId: null, // 定时器ID
carIndex: null, // 车牌号输入光标索引
keyboardShow: false, // 键盘显示/隐藏
provinceList: ['京', '津', '沪', '渝', '冀', '豫', '云', '辽', '黑', '湘','皖', '鲁', '新', '苏', '浙', '赣', '鄂', '桂', '甘', '晋','蒙', '陕', '吉', '闽', '贵', '粤', '青', '藏', '川', '宁','琼', '使', '领', '学', '警', '挂', 'del'
],
keyboardList: [['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'O', 'P'],['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'],['Z', 'X', 'C', 'V', 'B', 'N', 'M', 'del'],['学', '警', '港', '澳']
],

watch监听

watch: {"addShow"() {// 关闭弹窗时重置if (!this.addShow) {this.number='';this.carIndex = ''; // 车牌号输入光标索引this.carNumList = ['', '', '', '', '', '', '', '']; // 车牌号数组this.keyboardShow = false; // 车牌键盘隐藏}},
}

methods方法

methods:{// 点击车牌号输入selectCarNum(inx) {this.carIndex = inx;if (!this.keyboardShow) {this.keyboardShow = true;}},// 键盘输入keyboardBtn(val) {this.activeKey = val; // 键盘按键选中激活this.activeKeyBtn(); // 键盘按键激活定时器this.carNumList[this.carIndex] = val == 'del' ? '' : val;if (val == 'del' && this.carIndex > 0) {this.carIndex--;}if (val != 'del' && this.carIndex < this.carNumList.length - 1) {this.carIndex++;}// 判断前7个有没有值let ifData = this.carNumList.length >= 7 && this.carNumList.slice(0, 7).every(value => value != null && value !== '');if(ifData == true){this.keyboardShow = false;this.checkCarInfo('write');//判断填写车牌是否绑定}this.$forceUpdate();},// 键盘按键激活定时器activeKeyBtn() {// 清除之前的定时器if (this.timeoutId) clearTimeout(this.timeoutId)// 1秒后重置状态this.timeoutId = setTimeout(() => {this.activeKey = '';}, 300)},
}

css

.carDiv{padding: 10px 10px;border-bottom:0.5px solid #F4F4F4;.carTitle{font-size: 14px;color: #1f324e;font-weight: 700;span{color: #F81E1E;}}
}.car-num-input {width: 100%;display: flex;align-items: center;justify-content: space-between;padding: 4px 0;box-sizing: border-box;div {width: 36px;height: 36px;background: rgba(0, 0, 0, .05);border-radius: 4px;border: 1px solid transparent;box-sizing: border-box;display: flex;align-items: center;justify-content: center;color: #000;font-size: 14px;line-height: 18px;&:first-child {color: rgba(0, 0, 0, .5);}&:last-child {border: 1px dashed rgba(27, 171, 80, 0.8);color: rgba(0, 0, 0, .5);font-size: 8px;}}.active {border: 1px solid rgba(48, 112, 255, 0.8) !important;}.status-key {color: #000 !important;font-size: 14px !important;line-height: 18px !important;}
}// 车牌弹框
.keyboard-layer {width: 100%;background: #D0D5DC;padding: 8px 4px 16px;box-sizing: border-box;// position: absolute;// bottom: 0;// left: 0;.keyboard-header {width: 100%;display: flex;align-items: center;justify-content: flex-end;padding: 0 8px 8px;box-sizing: border-box;span {color: #2E59FD;font-family: "PingFang SC";font-size: 14px;font-weight: 700;line-height: 28px;cursor: pointer;}}.province-layer {width: 100%;display: flex;align-items: center;justify-content: center;flex-wrap: wrap;span {color: #000;font-size: 14px;line-height: 40px;background: #fff;border-radius: 6px;width:32px;height:40px;text-align: center;box-sizing: border-box;margin: 2px;box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.1);}}.keyboard-item {width: 100%;div {display: flex;align-items: center;justify-content: center;span {color: #000;font-size: 14px;line-height: 40px;background: #fff;border-radius: 6px;width:32px;height:40px;text-align: center;box-sizing: border-box;margin: 4px;box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.3);}}}.no-btn {color: rgba(0, 0, 0, .4) !important;pointer-events: none;}.active-hover {background: #B3BAC7 !important;}
}

效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

http://www.lryc.cn/news/625795.html

相关文章:

  • 楼宇自控系统的应用,已然成为智能建筑行业发展方向
  • 【网络运维】Playbook部署文件:Files模块库&JINJA2模板
  • 18650锂电池自动化生产线:智能集成提升制造效能
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlashEEPROMEmulation
  • 星链之供应链:SpaceX供应链韧性密码,70%内部制造+模块化设计,传统航天企业如何追赶?
  • 数字孪生 :提高制造生产力的智能方法
  • 写代码的方式部署glm-4-9b-chat模型:gradio和api两种模式
  • python学习DAY46打卡
  • Apache ECharts 6.0.0 版本-探究自定义动态注册机制(二)
  • npm下的scratch(少儿编程篇)
  • 使用segment-anything将目标检测label转换为语义分割label
  • 零售行业新店网络零接触部署场景下,如何选择SDWAN
  • 【Proteus仿真】【51单片机】基于51单片机自动售货机12864屏幕
  • ICCV 2025 | 首个3D动作游戏专用VLA模型,打黑神话只狼超越人类玩家
  • 如何免费给视频加字幕
  • AndroidR车机系统Settings数据库增加非持久化存储键值方案-续
  • 国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—ARM + FPGA通信案例
  • 深入解析Spring MVC运行流程:从请求到响应的完整旅程
  • React学习(六)
  • Spring Cache 整合 Redis 实现高效缓存
  • Android音频学习(十三)——音量配置文件分析
  • proDAD VitaScene:专业视频转场特效滤镜软件
  • spring声明式事务,finally 中return对事务回滚的影响
  • 第12章 React生态工具链
  • 第14章 现代React特性
  • 在VSCode中进行Vue前端开发推荐的插件
  • Web3.0 时代的电商系统:区块链如何解决信任与溯源问题?
  • [Git] 如何拉取 GitHub 仓库的特定子目录