小程序模拟输入车牌号键盘

wxml

       <view class=''>车牌号</view>
              <view class='to-flex-center-between' bindtap='licensePlateNumber'>
                <view bindtap='getFocus' class='codeView to-relative margin-top-small'>
                  <view class='codeTab {{codeList.length>0?"codeTabFocus":""}}'>{{codeList[0]}}</view>
                  <view class='codeTab {{codeList.length>1?"codeTabFocus":""}}'>{{codeList[1]}}</view>
                  <view class='codeTab {{codeList.length>2?"codeTabFocus":""}}'>{{codeList[2]}}</view>
                  <view class='codeTab {{codeList.length>3?"codeTabFocus":""}}'>{{codeList[3]}}</view>
                  <view class='codeTab {{codeList.length>4?"codeTabFocus":""}}'>{{codeList[4]}}</view>
                  <view class='codeTab {{codeList.length>5?"codeTabFocus":""}}'>{{codeList[5]}}</view>
                  <view class=' codeTab {{codeList.length>6?"codeTabFocus":""}}'>{{codeList[6]}}
                  </view>
                  <view class=' codeTab {{codeList.length>7?"codeTabFocus":""}}'>{{codeList[7]}}
                    <image src='/images/xinnengyuan-icon.png' style='width:68rpx;height:auto;right:-10rpx;top:-10rpx;position:absolute' mode='widthFix'></image>
                  </view>
                </view>
              </view>

因为模拟不了原生间键盘会让整个页面如果遮挡住了往上弹起特将键盘写成弹框模式

<!-- 输入车牌号弹框 -->
<view class='shadow' wx:if='{{ plateListFlag }}'></view>
<view wx:if='{{ plateListFlag }}' class='plateList box-sizing'>
  <view class='to-flex-center-between ' style='padding:0 40rpx;margin-bottom:20rpx'>
    <view class='color-11141A font-size-bigger font-weight-bold'>车牌号</view>
    <image src='/images/cancel-black.png' style='width:44rpx;height:auto' mode='widthFix' bindtap='cancelPlate'></image>
  </view>
  <view class='login_input  border-color-EFF1F4' style='padding-bottom:40rpx;'>
    <input disabled='true' value='{{ licensePlateNumber }}'></input>
    <view bindtap='getFocus' class='codeView to-relative' style='margin:0 32rpx'>
      <view class='codeTab {{licensePlateNumberList.length>0?"codeTabFocus":""}}'>{{licensePlateNumberList[0]}}</view>
      <view class='codeTab {{licensePlateNumberList.length>1?"codeTabFocus":""}}'>{{licensePlateNumberList[1]}}</view>
      <view class='codeTab {{licensePlateNumberList.length>2?"codeTabFocus":""}}'>{{licensePlateNumberList[2]}}</view>
      <view class='codeTab {{licensePlateNumberList.length>3?"codeTabFocus":""}}'>{{licensePlateNumberList[3]}}</view>
      <view class='codeTab {{licensePlateNumberList.length>4?"codeTabFocus":""}}'>{{licensePlateNumberList[4]}}</view>
      <view class='codeTab {{licensePlateNumberList.length>5?"codeTabFocus":""}}'>{{licensePlateNumberList[5]}}</view>
      <view class=' codeTab {{licensePlateNumberList.length>6?"codeTabFocus":""}}'>{{licensePlateNumberList[6]}}
      </view>
      <view class=' codeTab {{licensePlateNumberList.length>7?"codeTabFocus":""}}'>{{licensePlateNumberList[7]}}
        <image src='/images/xinnengyuan-icon.png' style='width:68rpx;height:auto;right:-10rpx;top:-10rpx;position:absolute' mode='widthFix'></image>
      </view>
    </view>
  </view>
  <view class='container margin-top-lit-big box-sizing' hidden='{{licensePlate_provinces_Box}}'>
    <view wx:for='{{ plateList}}' bindtap='licensePlate_provinces' data-id='{{ index }}' data-licensePlateProvinces='{{item}}' wx:key='index' class='box-sizing palteClass'>{{ item }}</view>
    <i wx:for='{{plateList.length-1 }}' wx:key='index'></i>
    <view class='to-absolute to-flex' style='right:32rpx;bottom:46rpx;'>
      <view class='dele-icon' bindtap="licensePlate_delete">
        <image src='/images/dele-icon.png' style='width:40rpx;height:auto;' mode='widthFix'></image>
      </view>
      <view class='confirm-btn' bindtap="confirmBtn">
        完成
      </view>
    </view>
  </view>
  <view class='container margin-top-lit-big box-sizing' hidden='{{licensePlate_letter_Box}}'>
    <block wx:if='{{ licensePlate_digital_Box }}'>
      <view wx:for='{{ licensePlate_digital}}' class='box-sizing palteClass' style='color:#ccc;border-color:#ccc'>{{ item }}</view>
    </block>
    <block wx:else>
      <view wx:for='{{ licensePlate_digital}}' bindtap='licensePlate_digital' data-id='{{ index }}' data-licensePlateProvinces='{{item}}' wx:key='index' class='box-sizing palteClass'>{{ item }}</view>
    </block>
    <view wx:for='{{ licensePlate_letter}}' bindtap='licensePlate_letter' data-id='{{ index }}' data-licensePlateProvinces='{{item}}' wx:key='index' class='box-sizing palteClass'>{{ item }}</view>
    <i wx:for='{{plateList.length-1 }}' wx:key='index'></i>
    <view class='to-absolute to-flex' style='right:32rpx;bottom:46rpx;'>
      <view class='dele-icon' bindtap="licensePlate_delete">
        <image src='/images/dele-icon.png' style='width:40rpx;height:auto;' mode='widthFix'></image>
      </view>
      <view class='confirm-btn' bindtap="confirmBtn">
        完成
      </view>
    </view>
  </view>
</view>

对应的wxss

/* 车牌号输入框的样式 */

 .plateList {
  padding: 32rpx 0rpx;
  position: fixed;
  bottom: 0;
  background: #fff;
  width: 100%;
  z-index: 100
}

.palteClass {
  border: 0.5rpx solid #c5c9d2;
 width: 60rpx;
 height: 84rpx;
 line-height: 84rpx;
 text-align: center;
  margin-right: 6rpx;
  margin-bottom: 20rpx;
  border-radius: 10rpx;
  color: #424752;
  font-size: 40rpx;
}
.container > i {
    width: 60rpx;
}
.car-number-wrapper{
  padding: 40rpx;
  box-sizing: border-box;
  display: flex;
  align-items: center;
 width: 686rpx;
 margin-left: 32rpx;
}
.container{
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  padding: 0 32rpx;
}
/* 使用伪元素辅助左对齐 */
.container::after {
    content: '';
    flex: auto;    /* 或者flex: 1 */
}
.single-number{
 height: 88rpx;
line-height: 88rpx;
text-align: center;
width: 78rpx;
  border-radius: 12rpx;
  border: 2rpx solid #C5C9D2;
  margin-right: 8rpx;
}
.dele-icon{
  width: 100rpx;
  height: 84rpx;
  line-height: 84rpx;
margin-right: 10rpx;
background: #ADB4BD;
border-radius: 12rpx;
text-align: center
}
.confirm-btn{
  text-align: center;
  background: #00C1C1;
  color: #fff;
    width: 140rpx;
  height: 84rpx;
  line-height: 84rpx;
  border-radius: 12rpx;
}

.login_input {
  display: flex;
  align-items: center;
  padding: 15rpx 0;
  border-bottom: 0.5rpx solid #c5c9d2;
}

.login_input .input_text {
  font-size: 30rpx;
  color: #c5c9d2;
  margin-top: 7rpx;
}

.login_input input {
  font-size: 30rpx;
  font-weight: 500;
  height: 40rpx;
  /* width: 100%; */
  width: 0%;
}

.codeView {
  width: 100%;
  height: 68rpx;
  display: flex;
  white-space: nowrap;
  align-items: center;
  justify-content: space-between
}

.codeTab {
  margin-right: 7rpx;
  width: 64rpx;
  height: 68rpx;
  line-height: 68rpx;
  border-radius: 12rpx;
  text-align: center;
  border: 1rpx solid #c5c9d2;
}

.codeTabFocus {
  border: 1rpx solid #1566fe;
  color: #1566fe;
}

.noBorder {
  border: none;
}

对应的js

data:{
      licensePlateShowHidden: true,
    licensePlate_provinces_Box: true,
    licensePlate_letter_Box: true,
    licensePlate_digital_Box: true,
    licensePlateNumber:'',
    plateList: [
      "京", "沪", "浙", "苏", "粤", "鲁",
      "晋", "冀", "豫", "川", "渝", "辽",
      "吉", "黑", "皖", "鄂", "津", "贵",
      "云", "桂", "琼", "青", "新", "藏",
      "蒙", "宁", "甘", "陕", "闽", "赣",
      "湘"
    ],
    licensePlate_letter: [
      "A", "B", "C", "D", "E", "F",
      "G", "H", "L", "J", "K", "L",
      "M", "N", "O", "P", "Q", "R",
      "S", "T", "U", "V", "W", "X",
      "Y", "Z"
    ],
    licensePlate_digital: [
      "1", "2", "3",
      "4", "5", "6",
      "7", "8", "9",
      "0"
    ],
    codeFocus: false, //input焦点
},
  // 显示模拟键盘
  licensePlateNumber: function () {
    var that = this;
    var licensePlateNumber = this.data.licensePlateNumber;
    var licensePlateNumberLen = licensePlateNumber.length;
    console.log(licensePlateNumber, licensePlateNumberLen)
    if (licensePlateNumberLen == 0) {
      this.setData({
        licensePlateShowHidden: false,
        licensePlate_provinces_Box: false,
      })
    } else if (licensePlateNumberLen == 1) {
      this.setData({
        licensePlateShowHidden: false,
        licensePlate_letter_Box: false,
      })
    } else {
      this.setData({
        licensePlateShowHidden: false,
        licensePlate_digital_Box: false,
      })
    }
    this.setData({
      plateListFlag:true
    })

  },
  // 点击获取省份
  licensePlate_provinces: function (e) {
    this.setData({
      licensePlateNumber: e.target.dataset.licenseplateprovinces,
      licensePlateNumberList: [e.target.dataset.licenseplateprovinces],
      licensePlate_letter_Box: false,
      licensePlate_digital_Box: true,
      licensePlate_provinces_Box:true
    })
    console.log(e.target.dataset.licenseplateprovinces)
    console.log(this.data.licensePlateNumberLists)
  },

  // 点击获取字母
  licensePlate_letter: function (e) {
    var licensePlateNumber = this.data.licensePlateNumber;
    var licensePlateNumberLen = licensePlateNumber.length;
    var arr = licensePlateNumber + e.target.dataset.licenseplateprovinces
    if (licensePlateNumberLen != 8) {
      this.setData({
        licensePlateNumber: licensePlateNumber + e.target.dataset.licenseplateprovinces,
        licensePlateNumberList: arr.split('')
      })
      console.log(e.target.dataset.licenseplateprovinces)
      console.log(this.data.licensePlateNumberList)
    } else {
      wx.showToast({
        title: '车牌号码最多不能超过8位',
        icon: 'none',
        duration: 1500,
      })
    }
    this.setData({
      licensePlate_digital_Box:false
    })
  },

  // 点击获取数字
  licensePlate_digital: function (e) {
    var licensePlateNumber = this.data.licensePlateNumber;
    var licensePlateNumberLen = licensePlateNumber.length;
    var arr2 = licensePlateNumber + e.target.dataset.licenseplateprovinces
    if (licensePlateNumberLen != 8) {
      this.setData({
        licensePlateNumber: licensePlateNumber + e.target.dataset.licenseplateprovinces,
        licensePlateNumberList: arr2.split(''),
      })
      console.log(e.target.dataset.licenseplateprovinces)
    } else {
      wx.showToast({
        title: '车牌号码最多不能超过8位',
        icon: 'none',
        duration: 1500,
      })
    }
  },
  cancelPlate:function(){
   this.setData({
     licensePlateNumber: '',
     licensePlateNumberList:[],
     plateListFlag:false
   })
  },
  confirmBtn: function () {
    var licensePlateNumber = this.data.licensePlateNumber
    if (licensePlateNumber){
      if(licensePlateNumber.length<7){
        wx.showToast({
          title: '车牌号码不能低于7位',
          icon: 'none',
          duration: 1500,
        })
      }else{
        console.log(licensePlateNumber.split(''))
        this.setData({
          plateListFlag: false,
          codeList: licensePlateNumber.split('')
        })
      }
    }else{
      console.log(licensePlateNumber)
    }
  },

  // 删除
  licensePlate_delete: function (e) {
    var licensePlateNumber = this.data.licensePlateNumber;
    var licensePlateNumberLen = licensePlateNumber.length;
    var licensePlateNumberDelete = licensePlateNumber.split('');
    var newLicensePlateNumber = licensePlateNumberDelete.join('').slice(0, -1)
    var newLicensePlateNumber1 = licensePlateNumberDelete.join('').slice(0, -1)
    if (licensePlateNumberDelete.slice(0, -1).length == 1) {
      this.setData({
        licensePlate_provinces_Box: true,
        licensePlate_letter_Box: false,
        licensePlate_digital_Box: true,
      })
    } else if (licensePlateNumberLen == 0 || licensePlateNumber == '' || licensePlateNumberDelete.slice(0, -1).length == 0) {
      this.setData({
        licensePlate_provinces_Box: false,
        licensePlate_letter_Box: true,
        licensePlate_digital_Box: true,
      })
    }
    this.setData({
      licensePlateNumber: newLicensePlateNumber,
      licensePlateNumberList: newLicensePlateNumber1,
    })
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值