NumberKeyboard 数字键盘

介绍

虚拟数字键盘,可以配合密码输入框组件或自定义的输入框组件使用。

引入

  1. import { createApp } from 'vue';
  2. import { NumberKeyboard } from 'vant';
  3. const app = createApp();
  4. app.use(NumberKeyboard);

代码演示

默认样式

数字键盘提供了 inputdeleteblur 事件,分别对应输入内容、删除内容和失去焦点的动作。

  1. <van-cell @touchstart.stop="show = true"> 弹出默认键盘 </van-cell>
  2. <van-number-keyboard
  3. :show="show"
  4. @blur="show = false"
  5. @input="onInput"
  6. @delete="onDelete"
  7. />
  1. import { Toast } from 'vant';
  2. export default {
  3. data() {
  4. return {
  5. show: true,
  6. };
  7. },
  8. methods: {
  9. onInput(value) {
  10. Toast(value);
  11. },
  12. onDelete() {
  13. Toast('删除');
  14. },
  15. },
  16. };

点击键盘以外的区域时,键盘会自动收起,通过阻止元素上的 touchstart 事件冒泡可以避免键盘收起。

带右侧栏的键盘

将 theme 属性设置为 custom 来展示键盘的右侧栏,常用于输入金额的场景。

  1. <van-number-keyboard
  2. :show="show"
  3. theme="custom"
  4. extra-key="."
  5. close-button-text="完成"
  6. @blur="show = false"
  7. @input="onInput"
  8. @delete="onDelete"
  9. />

身份证号键盘

通过 extra-key 属性可以设置左下角按键内容,比如需要输入身份证号时,可以将 extra-key 设置为 X

  1. <van-cell plain type="primary" @touchstart.stop="show = true">
  2. 弹出身份证号键盘
  3. </van-cell>
  4. <van-number-keyboard
  5. :show="show"
  6. extra-key="X"
  7. close-button-text="完成"
  8. @blur="show = false"
  9. @input="onInput"
  10. @delete="onDelete"
  11. />

键盘标题

通过 title 属性可以设置键盘标题。

  1. <van-cell plain type="primary" @touchstart.stop="show = true">
  2. 弹出带标题的键盘
  3. </van-cell>
  4. <van-number-keyboard
  5. :show="show"
  6. title="键盘标题"
  7. extra-key="."
  8. close-button-text="完成"
  9. @blur="show = false"
  10. @input="onInput"
  11. @delete="onDelete"
  12. />

配置多个按键

当 theme 为 custom 时,支持以数组的形式配置两个 extra-key

  1. <van-cell plain type="primary" @touchstart.stop="show = true">
  2. 弹出配置多个按键的键盘
  3. </van-cell>
  4. <van-number-keyboard
  5. :show="show"
  6. :extra-key="['00', '.']"
  7. close-button-text="完成"
  8. @blur="show = false"
  9. @input="onInput"
  10. @delete="onDelete"
  11. />

双向绑定

可以通过 v-model 绑定键盘当前输入值。

  1. <van-field readonly clickable :value="value" @touchstart.stop="show = true" />
  2. <van-number-keyboard
  3. v-model="value"
  4. :show="show"
  5. :maxlength="6"
  6. @blur="show = false"
  7. />
  1. export default {
  2. data() {
  3. return {
  4. show: false,
  5. value: '',
  6. };
  7. },
  8. };

API

Props

参数说明类型默认值
v-model当前输入值string-
show是否显示键盘boolean-
title键盘标题string-
theme样式风格,可选值为 customstringdefault
maxlength输入值最大长度number | string-
transition是否开启过场动画booleantrue
z-index键盘 z-index 层级number | string100
extra-key v2.8.2底部额外按键的内容string | string[]‘’
close-button-text关闭按钮文字,空则不展示string-
delete-button-text删除按钮文字,空则展示删除图标string-
close-button-loading v2.7.0是否将关闭按钮设置为加载中状态,仅在 theme=”custom” 时有效booleanfalse
show-delete-key v2.5.9是否展示删除图标booleantrue
hide-on-click-outside点击外部时是否收起键盘booleantrue
teleport v2.10.0指定挂载的节点,用法示例string | Element-
safe-area-inset-bottom是否开启底部安全区适配booleantrue

Events

事件名说明回调参数
input点击按键时触发key: 按键内容
delete点击删除键时触发-
close点击关闭按钮时触发-
blur点击关闭按钮或非键盘区域时触发-
show键盘完全弹出时触发-
hide键盘完全收起时触发-

Slots

名称说明
delete自定义删除按键内容
extra-key自定义左下角按键内容
title-left自定义标题栏左侧内容

样式变量

组件提供了下列 Less 变量,可用于自定义样式,使用方法请参考主题定制

名称默认值描述
@number-keyboard-background-color@gray-2-
@number-keyboard-key-height48px-
@number-keyboard-key-font-size28px-
@number-keyboard-key-active-color@gray-3-
@number-keyboard-delete-font-size@font-size-lg-
@number-keyboard-title-color@gray-7-
@number-keyboard-title-height34px-
@number-keyboard-title-font-size@font-size-lg-
@number-keyboard-close-padding0 @padding-md-
@number-keyboard-close-color@text-link-color-
@number-keyboard-close-font-size@font-size-md-
@number-keyboard-button-text-color@white-
@number-keyboard-button-background-color@blue-
@number-keyboard-cursor-color@text-color-
@number-keyboard-cursor-width1px-
@number-keyboard-cursor-height40%-
@number-keyboard-cursor-animation-duration1s-
@number-keyboard-z-index100-

常见问题

在桌面端无法操作组件?

参见桌面端适配

NumberKeyboard 数字键盘 - 图1