小程序开发过程中可能会碰到和车牌信息相关的开发,这时候就需要输入车牌号,传统的键盘输入车牌号,需要打出汉字,再选择相应的字母数字,并不是特别方便,这里笔者专门开发了车牌号键盘,可以任意选择修改省份,数字和字母。
先看示例图:
在这里插入图片描述
在这里插入图片描述
组件主要代码如下:

// components/plate-number-keyboard/plate-number-keyboard.js
Component({
  behaviors: [],
  properties: {
    show: { // 控制键盘显示隐藏
      type: Boolean,
      value: false
    initValue: { // 初始化的值
      type: String,
      value: ""
  data: {
    plateNumber: "", // 键盘操作结果值
    provinceList: {
      line1: ['京', '津', '渝', '沪', '冀', '晋', '辽', '吉', '黑', '苏'],
      line2: ['浙', '皖', '闽', '赣', '鲁', '豫', '鄂', '湘', '粤', '琼'],
      line3: ['川', '贵', '云', '陕', '甘', '青', '蒙', '贵', '宁', '新'],
      line4: ['藏', '使', '领', '警', '学', '港', '澳']
    letterNumberList: {
      line1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
      line2: ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P'],
      line3: ['A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L'],
      line4: ['Z', 'X', 'C', 'V', 'B', 'N', 'M']
    showProvince: true, // 是否显示省份面板,控制省份面板和字符面板显示
  }, // 私有数据,可用于模板渲染
  lifetimes: {
    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
    attached: function() {},
    moved: function() {},
    detached: function() {},
  // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
  attached: function() {}, // 此处attached的声明会被lifetimes字段中的声明覆盖
  ready: function() {
    // 如果初始化有值,赋值,否则,置为空
    this.setData({
      plateNumber: this.data.initValue ? this.data.initValue : ''
  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show: function() {},
    hide: function() {},
    resize: function() {},
  methods: {
     * 键盘面板切换操作,控制省份内容和字符内容显示
    _clickChangePlane: function() {
      this.setData({
        showProvince: !this.data.showProvince
     * 关闭键盘,将键盘隐藏
    _closeKeyboard: function(e) {
      console.log(2)
      this.setData({
        show: false
    /* 触发外部绑定事件,传递结果值 */
    _handleResult: function() {
      const myEventDetail = {
        value: this.data.plateNumber  // 传递到结果文本
      // 触发外部绑定事件,传递结果参数
      this.triggerEvent('getResult', myEventDetail);
     * 键盘主要键点击事件,将点击内容更新到plateNumber
    _handleClick: function(e) {
      // 如果当前显示的省份面板,当即任意省份后,自动切换到字符面板,同时将结果值的第一个字符修改
      if (this.data.showProvince) {
        this.setData({
          showProvince: false
      let currentResult = this.data.plateNumber; // 当前的结果值
      let currentText = e.currentTarget.dataset.text; // 当前的操作值
      // 车牌号最多8位,大多数7位,新能源8位,控制不能超过8位数
      if (currentResult.length < 8) {
        this.setData({
          plateNumber: currentResult + currentText
        this._handleResult();
     * 删除回退点击事件
    _handleDelete: function() {
      let currentText = this.data.plateNumber;
      currentText = currentText.substring(0, currentText.length - 1);
      // 当当前结果值长度大于0时,可执行删减操作
      if (currentText.length >= 0) {
        this.setData({
          plateNumber: currentText
        this._handleResult();
     * 防止点击穿透
    _preventDefault: function(e) {}

具体的说明文档,以及详细代码见下文链接:
小程序组件:车牌号键盘
觉得还可以的给个star,有问题可以留言。

欢迎关注博主——小圣贤君,有问题可以留言哦~

yarn add vehicle - plate - keyboard :hammer: 用法 import LicenseKeyboard from 'vehicle-plate-keyboard' ; import 'vehicle-plate-keyboard/dist/main.css' ; < LicenseKeyboard xss=removed xss=removed xss=removed> setState ( { value } ) } value = { state . value } done = { 公司要做一个停车场微信小程序,支持临时车预支付以及支付记录查询等功能,其中涉及车牌输入的功能,为了提升用户体验,避免繁琐的输入,决定自己写一个键盘。 效果图如下 省份简写键盘如下: (此图片来源于网络,如有侵权,请联系删除! ) 省份简写键盘 英文简写键盘如下: (此图片来源于网络,如有侵权,请联系删除! ) 英文简写键盘 (此图片来源于网络,如有侵权,请联系删除! ) wxml文件内容 <view wx:if="{{isShow}}" class="vehicle-panel" style="height:430rpx;background-colo <view class="page_box" catchtap="hindKeyboard"> <view class="input_view" catchtap="hindKeyboard"> <text class="title">消费金额:</text> <view class="input_box" catchtap="showKeyboard"> <text class="i PlateNumberKeyBoard Android 自定义车牌键盘 最近在做物流的项目,需要输入车牌号,传统的输入体验并不好,来回切换还要手打,便有了自定义键盘的想法。 其实这个车牌需求并不多见,物流、租车、停车相关的会常见一些,好在有前辈已经铺好路了 这个比较详细: 1.在res文件夹下新建xml文件夹,新建两个文件:number_or_letters.xml(数字和大写字母)、province_abbreviation.xml(省会、直辖市、特别行政区简称)。 number_or_letters.xml <?xml version="1.0" encoding="UTF-8"?> <Keyboard android:keyWidth="10%p" android:keyHeight="8%" android:horizontalGap="0.0px" andro "usingComponents": { "van-overlay": "@vant/weapp/overlay/index", "van-divider": "@vant/weapp/divider/index"