NumberKeyboard 数字键盘 - Vant 4
⌨️ NumberKeyboard 数字键盘
🎯 介绍
NumberKeyboard 组件提供虚拟数字键盘功能,可以配合密码输入框组件或自定义的输入框组件使用。让数字输入更加便捷!
📦 引入
通过以下方式来全局注册组件,更多注册方式请参考组件注册。
js
import { createApp } from'vue'; import { NumberKeyboard } from'vant'; const app = createApp(); app.use(NumberKeyboard);🎯 代码演示
🔧 默认样式
最基础的数字键盘,就像手机上的拨号键盘一样简洁实用 📱
html
<template>
<div>
<van-cell is-link title="弹出默认键盘" @click="show = true" />
<van-number-keyboard
v-model:show="show"
@input="onInput"
@delete="onDelete"
@blur="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';
const show = ref(false);
const onInput = (value) => {
showToast(`输入了:${value} 🔢`);
};
const onDelete = () => {
showToast('删除了一个字符 🗑️');
};
</script>💡 小贴士:点击键盘以外的区域时,键盘会自动收起,通过阻止元素上的 touchstart 事件冒泡可以避免键盘收起。
💰 带右侧栏的键盘
专为金额输入场景设计,右侧栏让操作更便捷 💳
html
<template>
<div>
<van-cell is-link title="弹出带右侧栏的键盘" @click="show = true" />
<van-number-keyboard
v-model:show="show"
theme="custom"
extra-key="."
close-button-text="完成"
@input="onInput"
@delete="onDelete"
@close="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';
const show = ref(false);
const onInput = (value) => {
showToast(`输入金额:${value} 💰`);
};
const onDelete = () => {
showToast('删除金额 💸');
};
</script>🆔 身份证号键盘
专为身份证号输入定制,X 键让最后一位输入无忧 🪪
html
<template>
<div>
<van-cell is-link title="身份证号键盘" @click="show = true" />
<van-number-keyboard
v-model:show="show"
extra-key="X"
close-button-text="完成"
@input="onInput"
@close="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';
const show = ref(false);
const onInput = (value) => {
showToast(`身份证号:${value} 🆔`);
};
</script>🏷️ 键盘标题
给键盘加个标题,让用户知道在输入什么 📝
html
<template>
<div>
<van-cell is-link title="带标题的键盘" @click="show = true" />
<van-number-keyboard
v-model:show="show"
title="请输入密码"
extra-key="."
close-button-text="完成"
@close="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
const show = ref(false);
</script>🔧 配置多个按键
双按键配置,让输入更灵活 ⚡
html
<template>
<div>
<van-cell is-link title="多按键配置" @click="show = true" />
<van-number-keyboard
v-model:show="show"
theme="custom"
:extra-key="['00', '.']"
close-button-text="完成"
@input="onInput"
@close="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';
const show = ref(false);
const onInput = (value) => {
showToast(`输入:${value} ⚡`);
};
</script>🎲 随机数字键盘
安全第一!随机排列的数字键盘,防止密码被偷窥 🔐
html
<template>
<div>
<van-cell is-link title="随机数字键盘" @click="show = true" />
<van-number-keyboard
v-model:show="show"
:random-key-order="true"
@input="onInput"
@blur="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { showToast } from 'vant';
const show = ref(false);
const onInput = (value) => {
showToast(`安全输入:${value} 🔐`);
};
</script>🔗 双向绑定
实时绑定输入值,就像魔法一样同步 ✨
html
<template>
<div>
<van-field
v-model="value"
readonly
clickable
label="输入值"
placeholder="点击弹出键盘"
@click="show = true"
/>
<van-number-keyboard
v-model="value"
v-model:show="show"
:maxlength="6"
@blur="show = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
const show = ref(false);
const value = ref('');
</script>
## API
### Props
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| v-model | 当前输入值,实时绑定用户输入 📝 | *string* | \- |
| show | 是否显示键盘,控制键盘的显示隐藏 👁️ | *boolean* | \- |
| title | 键盘标题,给键盘加个名字 🏷️ | *string* | \- |
| theme | 样式风格,可选值为 `custom`,决定键盘外观 🎨 | *string* | `default` |
| maxlength | 输入值最大长度,限制输入字符数 📏 | *number | string* | `Infinity` |
| transition | 是否开启过场动画,让键盘出现更优雅 ✨ | *boolean* | `true` |
| z-index | 键盘 z-index 层级,控制显示层次 📚 | *number | string* | `100` |
| extra-key | 底部额外按键的内容,自定义特殊按键 🔧 | *string | string\[\]* | `''` |
| close-button-text | 关闭按钮文字,空则不展示关闭按钮 ❌ | *string* | \- |
| delete-button-text | 删除按钮文字,空则展示删除图标 🗑️ | *string* | \- |
| close-button-loading | 是否将关闭按钮设置为加载中状态,仅在 `theme="custom"` 时有效 ⏳ | *boolean* | `false` |
| show-delete-key | 是否展示删除图标,控制删除键显示 🗑️ | *boolean* | `true` |
| blur-on-close | 是否在点击关闭按钮时触发 blur 事件 👆 | *boolean* | `true` |
| hide-on-click-outside | 是否在点击外部时收起键盘,点击空白处自动关闭 🖱️ | *boolean* | `true` |
| teleport | 指定挂载的节点,等同于 Teleport 组件的 [to 属性](https://cn.vuejs.org/api/built-in-components.html#teleport) 🎯 | *string | Element* | \- |
| safe-area-inset-bottom | 是否开启[底部安全区适配](./advanced-usage),适配全面屏设备 📱 | *boolean* | `true` |
| random-key-order | 是否将通过随机顺序展示按键,增强安全性 🎲 | *boolean* | `false` |
### Events
| 事件名 | 说明 | 回调参数 |
| --- | --- | --- |
| input | 点击按键时触发,获取用户输入 ⌨️ | *key: string* |
| delete | 点击删除键时触发,执行删除操作 🗑️ | \- |
| close | 点击关闭按钮时触发,关闭键盘 ❌ | \- |
| blur | 点击关闭按钮或非键盘区域时触发,失去焦点 👆 | \- |
| show | 键盘完全弹出时触发,键盘显示时执行 👁️ | \- |
| hide | 键盘完全收起时触发,键盘隐藏时执行 🙈 | \- |
### Slots
| 名称 | 说明 |
| --- | --- |
| delete | 自定义删除按键内容,个性化删除键 🗑️ |
| extra-key | 自定义左下角按键内容,添加特殊功能键 🔧 |
| title-left | 自定义标题栏左侧内容,扩展标题区域 🏷️ |
### 类型定义
组件导出以下类型定义,让 TypeScript 开发更顺畅 📝
```ts
importtype { NumberKeyboardProps, NumberKeyboardTheme } from'vant';NumberKeyboardTheme 的可选值如下:
ts
type NumberKeyboardTheme = 'default' | 'custom';主题定制
样式变量
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件 🎨
| 名称 | 默认值 | 描述 |
|---|---|---|
| --van-number-keyboard-background | var(--van-gray-2) | 键盘背景色 🎨 |
| --van-number-keyboard-key-height | 48px | 按键高度 📏 |
| --van-number-keyboard-key-font-size | 28px | 按键字体大小 🔤 |
| --van-number-keyboard-key-active-color | var(--van-gray-3) | 按键激活颜色 ✨ |
| --van-number-keyboard-key-background | var(--van-white) | 按键背景色 🎨 |
| --van-number-keyboard-delete-font-size | var(--van-font-size-lg) | 删除键字体大小 🗑️ |
| --van-number-keyboard-title-color | var(--van-gray-7) | 标题文字颜色 🏷️ |
| --van-number-keyboard-title-height | 34px | 标题栏高度 📏 |
| --van-number-keyboard-title-font-size | var(--van-font-size-lg) | 标题字体大小 🔤 |
| --van-number-keyboard-close-padding | 0 var(--van-padding-md) | 关闭按钮内边距 📦 |
| --van-number-keyboard-close-color | var(--van-primary-color) | 关闭按钮颜色 ❌ |
| --van-number-keyboard-close-font-size | var(--van-font-size-md) | 关闭按钮字体大小 🔤 |
| --van-number-keyboard-button-text-color | var(--van-white) | 按钮文字颜色 ✏️ |
| --van-number-keyboard-button-background | var(--van-primary-color) | 按钮背景色 🎨 |
| --van-number-keyboard-z-index | 100 | 键盘层级 📚 |
常见问题
在桌面端无法操作组件?
参见桌面端适配 💻
相关文档
- PasswordInput 密码输入框 - 专为密码输入设计的组件 🔐
- Field 输入框 - 通用输入框组件 📝
- Popup 弹出层 - 弹出层基础组件 📱
- Overlay 遮罩层 - 遮罩层组件 🎭