Skip to content

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('1文字を削除しました 🗑️');
};
</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 と同等) 🎯 | *string | Element* | \- |
| safe-area-inset-bottom | 下部セーフエリア適応 📱 | *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-backgroundvar(--van-gray-2)キーボード背景色 🎨
--van-number-keyboard-key-height48pxキーの高さ 📏
--van-number-keyboard-key-font-size28pxキーのフォントサイズ 🔤
--van-number-keyboard-key-active-colorvar(--van-gray-3)キーのアクティブ色 ✨
--van-number-keyboard-key-backgroundvar(--van-white)キーの背景色 🎨
--van-number-keyboard-delete-font-sizevar(--van-font-size-lg)削除キーのフォントサイズ 🗑️
--van-number-keyboard-title-colorvar(--van-gray-7)タイトル文字色 🏷️
--van-number-keyboard-title-height34pxタイトルバーの高さ 📏
--van-number-keyboard-title-font-sizevar(--van-font-size-lg)タイトル文字サイズ 🔤
--van-number-keyboard-close-padding0 var(--van-padding-md)閉じるボタンの内側余白 📦
--van-number-keyboard-close-colorvar(--van-primary-color)閉じるボタンの色 ❌
--van-number-keyboard-close-font-sizevar(--van-font-size-md)閉じるボタンの文字サイズ 🔤
--van-number-keyboard-button-text-colorvar(--van-white)ボタン文字色 ✏️
--van-number-keyboard-button-backgroundvar(--van-primary-color)ボタン背景色 🎨
--van-number-keyboard-z-index100キーボードのレイヤー 📚

よくある質問

デスクトップでコンポーネントを操作できない?

デスクトップ対応 を参照してください 💻

📚 関連ドキュメント

Vant に基づく企業向けモバイルソリューション