如何在微信小程序中添加车牌输入功能?
最编程
2024-02-03 11:07:01
...
一、成品展示与介绍
在点击输入框的时候会弹出车牌输入键盘
二、相关思路解析
首先车牌号码由31位汉字,26位字母,10位数字组成的,开头第一位由省份简称的汉字,第二位字母根据省份下的城市或地区区分,最后的五位或者六位,是有字母和数字组成的,共有七位的车牌号码和八位的车牌号码。其中的八位数的车牌号码为新能源车的车牌号码。
再次是对于输入键盘的设计。这里设计了两个键盘一个是有31位汉字组成的,第二个是数字加英文字母。
最后是对交互的设计,在本次的设计中是从第一位开始输入。从最后一位进行删除,这样做的好处是可以保证车牌的输入规范和键盘切换的效果。
三、具体实现代码
- 界面显示
<view class="page">
<!-- 车牌号码输入框 -->
<view class="carNumber">
<view class="weui-cells__title">请输入车牌号码后在使用</view>
<!-- 车牌号头两位 -->
<view class="carNumber-items">
<view class="carNumber-items-box" bindtap='openKeyboard'>
<view class="carNumber-items-province carNumber-items-box-list">{{carnum[0] || '豫'}}</view>
<view class="carNumber-items-En carNumber-items-box-list">{{carnum[1] || 'A'}}</view>
</view>
<!-- 常规 -->
<view class="carNumber-item" bindtap='openKeyboard'>{{carnum[2] || ''}}</view>
<view class="carNumber-item" bindtap='openKeyboard'>{{carnum[3] || ''}}</view>
<view class="carNumber-item" bindtap='openKeyboard'>{{carnum[4] || ''}}</view>
<view class="carNumber-item" bindtap='openKeyboard'>{{carnum[5] || ''}}</view>
<view class="carNumber-item" bindtap='openKeyboard'>{{carnum[6] || ''}}</view>
<!-- 新能源 -->
<view class="carNumber-item {{showNewPower ? '': 'carNumber-item-newpower'}}">
<view wx:if="{{!showNewPower}}" bindtap='showPowerBtn'>
<view class="carNumber-newpower-add">+</view>
<view>新能源</view>
</view>
<view wx:if="{{showNewPower}}" bindtap='openKeyboard'>
{{carnum[7]}}
</view>
</view>
</view>
</view>
<!-- 提交车牌 -->
<button class="carNumberBtn" bindtap='submitNumber' style="background: #333333;color:#fff;" type="default">确定</button>
<!-- 虚拟键盘 -->
<view class="keyboard" hidden='{{!KeyboardState}}'>
<view class="keyboardClose">
<view class="keyboardClose_btn" bindtap='closeKeyboard'>关闭</view>
</view>
<!-- 省份简写键盘 -->
<view class="keyboard-item" hidden="{{carnum[0]}}">
<view class="keyboard-line" wx:for="{{provinces}}" wx:key="{{index}}">
<view class="keyboard-btn" wx:for="{{item}}" wx:key="{{index}}" data-val="{{itemlist}}" wx:for-item="itemlist" bindtap='bindChoose'>{{itemlist}}</view>
</view>
<view class="keyboard-del" bindtap='bindDelChoose'>
<text class="font_family icon-shanchu keyboard-del-font"></text>
</view>
</view>
<!-- 车牌号码选择键盘 -->
<view class="keyboard-item iscarnumber" hidden="{{!carnum[0]}}">
<view class="keyboard-line" wx:for="{{numbers}}" wx:key="{{index}}">
<view class="keyboard-btn" wx:for="{{item}}" wx:key="{{index}}" data-val="{{itemlist}}" wx:for-item="itemlist" bindtap='bindChoose'>{{itemlist}}</view>
</view>
<view class="keyboard-del" bindtap='bindDelChoose'>
<text class="font_family icon-shanchu keyboard-del-font"></text>
</view>
</view>
</view>
</view>
- 相关样式
.page{
background: #fff;
position: absolute;
top:0;
bottom:0;
width: 100%;
}
.weui-cells__title{
margin-top:.77em;
margin-bottom:.3em;
padding-left:15px;
padding-right:15px;
color:#999;
font-size:14px;
}
/* 虚拟键盘 */
.keyboard{
height: auto;
background: #d1d5d9;
position: fixed;
bottom:0;
width: 100%;
left:0;
}
.keyboard-item{
padding:10rpx 0 5rpx 0;
position: relative;
display: block;
}
/* 关闭虚拟键盘 */
.keyboardClose{
height: 70rpx;
background-color: #f7f7f7;
overflow: hidden;
}
.keyboardClose_btn{
float: right;
line-height: 70rpx;
font-size: 15px;
padding-right: 30rpx;
}
/* 虚拟键盘-省缩写 */
/* 虚拟键盘-行 */
.keyboard-line{
margin:0 auto;
text-align: center;
}
.iscarnumber .keyboard-line{
text-align: left;
margin-left: 5rpx;
}
/* 虚拟键盘-单个按钮 */
.keyboard-btn{
font-size: 17px;
color: #333333;
background: #fff;
display: inline-block;
padding:18rpx 0;
width: 63rpx;
text-align: center;
box-shadow: 0 2rpx 0 0 #999999;
border-radius: 10rpx;
margin:5rpx 6rpx;
}
/* 虚拟键盘-删除按钮 */
.keyboard-del{
font-size: 17px;
color: #333333;
background: #A7B0BC;
display: inline-block;
padding:4rpx 55rpx;
box-shadow: 0 2rpx 0 0 #999999;
border-radius: 10rpx;
margin:5rpx;
position: absolute;
bottom:5rpx;
right: 6rpx;
}
.keyboard-del-font{
font-size:25px;
}
/* 车牌号码 */
.carNumber-items{
text-align: center;
}
.carNumber-items-box{
width: 158rpx;
height: 90rpx;
border: 2rpx solid #CCCCCC;
border-radius: 4rpx;
display: inline-block;
vertical-align: middle;
position: relative;
margin-right: 30rpx;
}
.carNumber-items-box-list{
width: 76rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
display: inline-block;
font-size: 18px;
margin:10rpx 0;
vertical-align: middle;
}
.carNumber-items-province{
border-right: 1rpx solid #ccc;
}
.carNumber-items-box::after{
content: "";
width: 6rpx;
height: 6rpx;
position: absolute;
right: -22rpx;
top: 40rpx;
border-radius: 50%;
background-color: #ccc;
}
.carNumber-item{
width: 76rpx;
height: 90rpx;
font-size: 18px;
text-align: center;
border: 2rpx solid #CCCCCC;
border-radius: 4rpx;
line-height: 90rpx;
display: inline-block;
margin:0 4rpx;
vertical-align: middle;
}
/* 新能源 */
.carNumber-item-newpower{
border: 2rpx dashed #A8BFF3;
background-color: #F6F9FF;
color: #A8BFF3;
font-size: 12px;
line-height: 45rpx;
}
.carNumber-newpower-add{
font-size: 18px;
}
/* 确认按钮 */
.carNumberBtn{
border-radius: 4rpx;
margin:80rpx 40rpx;
}
- js代码
Page({
/**
* 页面的初始数据
*/
data: {
// 省份简写
provinces: [
['京', '沪', '粤', '津', '冀', '晋', '蒙', '辽', '吉', '黑'],
['苏', '浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘'],
['桂', '琼', '渝', '川', '贵', '云', '藏'],
['陕', '甘', '青', '宁', '新'],
],
// 车牌输入
numbers: [
["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
["A", "B", "C", "D", "E", "F", "G", "H", "J", "K"],
["L", "M", "N", "P", "Q", "R", "S", "T", "U", "V"],
["W", "X", "Y", "Z", "港", "澳", "学"]
],
carnum: [],
showNewPower: false,
KeyboardState: true
},
// 选中点击设置
bindChoose(e) {
if (!this.data.carnum[6] || this.data.showNewPower) {
var arr = [];
arr[0] = e.target.dataset.val;
this.data.carnum = this.data.carnum.concat(arr)
this.setData({
carnum: this.data.carnum
})
}
},
bindDelChoose() {
if (this.data.carnum.length != 0) {
this.data.carnum.splice(this.data.carnum.length - 1, 1);
this.setData({
carnum: this.data.carnum
})
}
},
showPowerBtn() {
this.setData({
showNewPower: true,
KeyboardState: true
})
},
closeKeyboard() {
this.setData({
KeyboardState: false
})
},
openKeyboard() {
this.setData({
KeyboardState: true
})
},
// 提交车牌号码
submitNumber() {
if (this.data.carnum[6]) {
// 跳转到tabbar页面
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
推荐阅读
-
微信 "扫一扫 "物联网,全面揭秘 "扫一扫 "背后的扫盲技术!-1.1 扫一扫感知物体是做什么的? 1.1 微信扫一扫是做什么的? 扫一扫识物是指以图片或视频(商品图片:鞋/包/美妆/服饰/家电/玩具/图书/食品/珠宝/家具/其他商品)为输入媒介,挖掘微信内容生态中的有价值信息(电商+百科+资讯,如图1所示),并展示给用户。这里的电商基本涵盖了微信小程序覆盖上亿SKU的全量优质电商,可以支持用户货比N家并直接下单购买,百科和资讯则聚合了微信内的头部自媒体如搜狗、搜搜、百度等,向用户展示和分享拍摄商品相关的内容资讯。 图 1 扫一扫识别功能示意图 欢迎大家更新iOS新版微信→扫一扫→识货,亲自体验,也欢迎大家通过识货界面的反馈按钮向我们提交反馈意见。 扫一扫识物实景图展示 1.2 扫一扫识物有哪些使用场景? 扫一扫识物的目的是为用户访问微信内部生态内容开辟一个新窗口,以用户扫图片为输入形式,为用户提供微信生态内容中的百科、资讯、电商等作为展示页面。除了用户熟悉的扫一扫操作外,我们还将进一步拓展长按操作,让用户更方便地进行扫一扫操作。"扫一扫知事 "的落地场景主要涵盖三大部分: a. 科普知识: a.科普知识。用户通过扫一扫,可以在微信生态圈中获取该对象的百科、资讯等常识或趣闻,帮助用户更好地了解该对象; b.购物场景。同样的搜索功能支持用户看到喜欢的商品立即检索到微信小程序电商中的同款商品,支持用户即扫即购; c.广告场景。扫一扫识别物体可以辅助公众号文章、视频更好地理解其中蕴含的图片信息,从而更好地投放匹配广告,提高点击率。 1.3 Sweep Sense 为 Sweep 家族带来了哪些新技术? 对于扫一扫来说,大家耳熟能详的应该就是扫一扫二维码、扫一扫小程序码、扫一扫条形码、扫一扫翻译了。无论是各种形式的编码还是文字字符,都可以看作是图片的一种特定编码形式,而物的识别则是对自然场景图片的识别,这对于扫一扫家族来说是一个质的飞跃,我们希望从物的识别入手,进一步拓展扫一扫对自然场景图片的理解能力,比如扫酒、扫车、扫植物、扫人脸等服务,如下图3所示。 图 3 Sweep 家族
-
如何在微信小程序中实现计时倒数功能
-
如何在微信小程序中启用无缝扫码功能(使用uniapp开发)
-
如何在微信小程序里添加扫二维码功能
-
如何在微信小程序中实现快速扫码功能 (以 Uni-app 为例)
-
如何在微信小程序中添加车牌输入功能?