分享

微信小程序车牌键盘

 昵称46504292 2018-07-27

项目背景

公司要做一个停车场微信小程序,支持临时车预支付以及支付记录查询等功能,其中涉及车牌输入的功能,为了提升用户体验,避免繁琐的输入,决定自己写一个键盘。

效果图如下

省份简写键盘如下:

省份简写键盘

英文简写键盘如下:

英文简写键盘

源代码

目录结构

目录结构

wxml文件内容

  1. <view wx:if="{{isShow}}" class="vehicle-panel" style="height:430rpx;background-color:{{backgroundColor}}">
  2. <!--省份简写键盘-->
  3. <block wx:if="{{keyBoardType === 1}}">
  4. <view class="vehicle-panel-row">
  5. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button' style="border:{{buttonBorder}}" wx:for="{{keyVehicle1}}" bindtap='vehicleTap' data-value="{{item}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  6. </view>
  7. <view class="vehicle-panel-row">
  8. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button' style="border:{{buttonBorder}}" wx:for="{{keyVehicle2}}" bindtap='vehicleTap' data-value="{{item}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  9. </view>
  10. <view class="vehicle-panel-row">
  11. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button' style="border:{{buttonBorder}}" wx:for="{{keyVehicle3}}" bindtap='vehicleTap' data-value="{{item}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  12. </view>
  13. <view class="vehicle-panel-row-last">
  14. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button vehicle-panel-row-button-last' bindtap='vehicleTap' data-value="{{item}}" wx:for="{{keyVehicle4}}" style="border:{{buttonBorder}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  15. </view>
  16. </block>
  17. <!--英文键盘 -->
  18. <block wx:else>
  19. <view class="vehicle-panel-row">
  20. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button vehicle-panel-row-button-number' bindtap='vehicleTap' data-value="{{item}}" wx:for="{{keyNumber}}" style="border:{{buttonBorder}}" wx:for-index="idx" wx:key="item">{{item}}</view>
  21. </view>
  22. <view class="vehicle-panel-row">
  23. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button' style="border:{{buttonBorder}}" wx:for="{{keyEnInput1}}" bindtap='vehicleTap' data-value="{{item}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  24. </view>
  25. <view class="vehicle-panel-row">
  26. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button' style="border:{{buttonBorder}}" wx:for="{{keyEnInput2}}" bindtap='vehicleTap' data-value="{{item}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  27. <view hover-class="vehicle-hover" style="border:{{buttonBorder}}" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button vehicle-panel-row-button-img'>
  28. <image src='./delete.svg' class='vehicle-en-button-delete' bindtap='vehicleTap' data-value="delete" mode='aspectFit'>删除</image>
  29. </view>
  30. </view>
  31. <view class="vehicle-panel-row-last">
  32. <view hover-class="vehicle-hover" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button vehicle-panel-row-button-last' bindtap='vehicleTap' style="border:{{buttonBorder}}" data-value="{{item}}" wx:for="{{keyEnInput3}}" wx:for-index="idx" wx:key="idx">{{item}}</view>
  33. <view hover-class="vehicle-hover" style="border:{{buttonBorder}}" hover-start-time="10" hover-stay-time="100" class='vehicle-panel-row-button vehicle-panel-ok' bindtap='vehicleTap' data-value="ok">确定</view>
  34. </view>
  35. </block>
  36. </view>

json文件

  1. {
  2. "component": true
  3. }

js文件

  1. Component({
  2. externalClasses: ['v-panel'],
  3. properties: {
  4. isShow: {
  5. type: Boolean,
  6. value: false,
  7. },
  8. buttonBorder: {
  9. type: String,
  10. value: "1px solid #ccc"
  11. },
  12. backgroundColor:{
  13. type: String,
  14. value: "#fff"
  15. },
  16. //1为省份键盘,其它为英文键盘
  17. keyBoardType: {
  18. type: Number,
  19. value: 1,
  20. }
  21. },
  22. data: {
  23. keyVehicle1: '陕京津沪冀豫云辽',
  24. keyVehicle2: '黑湘皖鲁新苏浙赣',
  25. keyVehicle3: '鄂桂甘晋蒙吉闽贵',
  26. keyVehicle4: '粤川青藏琼宁渝',
  27. keyNumber: '1234567890',
  28. keyEnInput1: 'QWERTYUIOP',
  29. keyEnInput2: 'ASDFGHJKL',
  30. keyEnInput3: 'ZXCVBNM',
  31. },
  32. methods: {
  33. vehicleTap: function (event) {
  34. let val = event.target.dataset.value;
  35. switch (val){
  36. case 'delete':
  37. this.triggerEvent('delete');
  38. this.triggerEvent('inputchange');
  39. break;
  40. case 'ok':
  41. this.triggerEvent('ok');
  42. break;
  43. default:
  44. this.triggerEvent('inputchange', val);
  45. }
  46. },
  47. }
  48. });

wxss文件

  1. :host {
  2. width: 100%;
  3. }
  4. .vehicle-panel {
  5. width: 100%;
  6. position: fixed;
  7. bottom: 0;
  8. display:flex;
  9. flex-direction:column;
  10. justify-content:center;
  11. z-index: 1000;
  12. }
  13. .vehicle-panel-row {
  14. display: flex;
  15. justify-content: space-between;
  16. align-items: center;
  17. }
  18. .vehicle-panel-row-last{
  19. display: flex;
  20. justify-content: space-between;
  21. align-items: center;
  22. }
  23. .vehicle-panel-row-button {
  24. background-color: #fff;
  25. margin: 5rpx;
  26. padding: 5rpx;
  27. width: 80rpx;
  28. height: 80rpx;
  29. text-align: center;
  30. line-height: 80rpx;
  31. border-radius: 10rpx;
  32. }
  33. .vehicle-panel-row-button-number {
  34. background-color: #eee;
  35. }
  36. .vehicle-panel-row-button-last {
  37. width: 90rpx;
  38. height: 90rpx;
  39. line-height: 90rpx;
  40. }
  41. .vehicle-hover {
  42. background-color: #ccc;
  43. }
  44. .vehicle-panel-row-button-img {
  45. display: flex;
  46. justify-content: center;
  47. align-items: center;
  48. }
  49. .vehicle-en-button-delete {
  50. width: 55rpx;
  51. height: 85rpx;
  52. }
  53. .vehicle-panel-ok {
  54. background-color: #0F4BA1;
  55. color: #fff;
  56. width: 150rpx;
  57. height: 80rpx;
  58. }

使用方式

示例

<v-panel is-show="{{isShow}}" bindok="inputOk" binddelete="inputdelete" bindinputchange="inputChange" key-board-type="{{keyBoardType}}" backgroundColor="white" />

属性

属性名称类型默认值说明
isShow布尔(boolean)false控制键盘是否显示,true显示,false不显示
buttonBorder字符串(String)"1px solid #ccc"控制键盘按钮边框,同css border属性
backgroundColor字符串(String)#fff控制键盘背景色,同css
keyBoardType数字(Number)1控制键盘显示类型,1为省份简写,2为英文简写

事件

事件名称触发情况返回值
delete删除按钮按下的时候触发微信事件
ok确定按钮按下时触发微信事件
inputchange输入按钮按下或者删除按钮按下时触发输入的值

完毕!

以上代码仅供大家学习交流

相关推荐:

在微信小程序中使用“随机键盘”

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约