Skip to content

Stepper ステッパー - Vant 4

Stepper ステッパー

紹介

ステッパーは増加ボタン・減少ボタン・入力欄で構成され、一定範囲の数値を入力・調整するためのコンポーネントです。

導入

以下の方法でコンポーネントをグローバル登録します。詳細はコンポーネント登録を参照してください。

js
import { createApp } from'vue'; 
import { Stepper } from'vant'; 
const app = createApp(); 
app.use(Stepper);

🎯 コード例

🔢 基本用法

v-model で入力値をバインドし、change イベントで値の変化を監視できます。数値の増減操作を簡単に実現します。

html
<template>
  <van-stepper v-model="value" @change="onChange" />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    const onChange = (value) => {
      console.log('現在の値:', value);
    };
    
    return {
      value,
      onChange,
    };
  },
};
</script>

📐 ステップ設定

step 属性で増減ボタンをクリックした際の変化量を設定します。デフォルトは 1 で、要件に応じて変更できます。

html
<template>
  <van-stepper v-model="value" step="2" />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

📊 入力範囲の制限

minmax 属性で入力値の範囲を制限します。デフォルトでは範囲外の値は自動的に補正されますが、auto-fixed で自動補正を無効化できます。

html
<template>
  <van-stepper v-model="value" min="5" max="40" />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(10);
    
    return {
      value,
    };
  },
};
</script>

🔢 整数输入の制限

integer 属性を設定すると、入力欄は整数のみ入力可能になります。

html
<template>
  <van-stepper v-model="value" integer />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

🚫 無効状態

disabled 属性でステッパーを無効化できます。無効状態ではボタンや入力欄の操作はできません。

html
<template>
  <van-stepper v-model="value" disabled />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

🔒 入力欄の無効化

disable-input 属性で入力欄のみを無効化できます。ボタン操作のみ許可したい場合に適しています。

html
<template>
  <van-stepper v-model="value" disable-input />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

📏 小数桁の固定

decimal-length 属性で小数の桁数を固定できます。数値フォーマットの一貫性を保ちます。

html
<template>
  <van-stepper v-model="value" step="0.2" :decimal-length="1" />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1.0);
    
    return {
      value,
    };
  },
};
</script>

🎨 サイズのカスタマイズ

input-width 属性で入力欄の幅を、button-size 属性でボタンサイズおよび入力欄の高さを設定できます。

html
<template>
  <van-stepper v-model="value" input-width="40px" button-size="32px" />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

⏳ 非同期変更

before-change 属性で値の変更前に検証・インターセプトできます。非同期処理に対応します。

html
<template>
  <van-stepper v-model="value" :before-change="beforeChange" />
</template>

<script>
import { ref } from 'vue';
import { closeToast, showLoadingToast } from 'vant';

export default {
  setup() {
    const value = ref(1);
    
    const beforeChange = (value) => {
      showLoadingToast({ forbidClick: true });
      
      return new Promise((resolve) => {
        setTimeout(() => {
          closeToast();
          // resolve 関数で true または false を返します
          resolve(true);
        }, 500);
      });
    };
    
    return {
      value,
      beforeChange,
    };
  },
};
</script>

🔘 角丸スタイル

themeround に設定すると角丸スタイルのステッパーを表示できます。よりモダンな見た目になります。

html
<template>
  <van-stepper v-model="value" theme="round" button-size="22" disable-input />
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const value = ref(1);
    
    return {
      value,
    };
  },
};
</script>

📋 API

🎛️ Props

属性名説明デフォルト
v-model📊 現在の入力値*numberstring*
min📉 最小値*numberstring*
max📈 最大値*numberstring*
auto-fixed🔧 制限範囲を超えた値を自動補正するか。false では自動補正しませんbooleantrue
default-value🎯 初期値(v-model が空のときに適用)*numberstring*
step📐 ステップ(クリック毎の変化量)*numberstring*
name🏷️ 識別子。change イベントの引数で取得可能*numberstring*
input-width📏 入力欄の幅(デフォルト単位は px*numberstring*
button-size📐 ボタンサイズ・入力欄の高さ(デフォルト単位は px*numberstring*
decimal-length📏 表示する小数桁数を固定*numberstring*
theme🎨 スタイル。round を指定可能string-
placeholder💬 入力欄のプレースホルダーstring-
integer🔢 整数のみ入力を許可するかbooleanfalse
disabled🚫 ステッパーを無効化するかbooleanfalse
disable-plus➕ 増加ボタンを無効化するかbooleanfalse
disable-minus➖ 減少ボタンを無効化するかbooleanfalse
disable-input🔒 入力欄を無効化するかbooleanfalse
before-change⏳ 値の変更前のコールバック。false で入力を阻止。Promise 返却可*(value: string) => booleanPromise<boolean>*
show-plus👁️ 増加ボタンを表示するかbooleantrue
show-minus👁️ 減少ボタンを表示するかbooleantrue
show-input👁️ 入力欄を表示するかbooleantrue
long-press👆 長押しで増減を有効にするかbooleantrue
allow-empty🈳 空文字の入力を許可するか(true で許可)booleanfalse

🎪 Events

イベント名説明コールバック引数
change🔄 バインド値が変化したときに発火value: string, detail: { name: string }
overlimit⚠️ 無効なボタンをクリック時に発火-
plus➕ 増加ボタンをクリック時に発火-
minus➖ 減少ボタンをクリック時に発火-
focus🎯 入力欄がフォーカスしたときに発火event: Event
blur😴 入力欄がフォーカスを失ったときに発火event: Event

📘 型定義

コンポーネントは以下の型定義をエクスポートし、TypeScript プロジェクトでの利用を容易にします:

ts
import type { StepperTheme, StepperProps } from 'vant';

🎨 テーマカスタマイズ

🎭 スタイル変数

コンポーネントは以下の CSS 変数を提供しており、カスタムスタイルに使用できます。使用方法については ConfigProvider コンポーネント を参照してください。

名称デフォルト値説明
--van-stepper-backgroundvar(--van-active-color)🎨 ステッパーの背景色
--van-stepper-button-icon-colorvar(--van-text-color)🔘 ボタンアイコンの色
--van-stepper-button-disabled-colorvar(--van-background)🚫 無効ボタンの背景色
--van-stepper-button-disabled-icon-colorvar(--van-gray-5)🚫 無効ボタンのアイコン色
--van-stepper-button-round-theme-colorvar(--van-primary-color)🔴 ラウンドテーマのボタン色
--van-stepper-input-width32px📏 入力欄の幅
--van-stepper-input-height28px📐 入力欄の高さ
--van-stepper-input-font-sizevar(--van-font-size-md)🔤 入力欄の文字サイズ
--van-stepper-input-line-heightnormal📏 入力欄の行の高さ
--van-stepper-input-text-colorvar(--van-text-color)🖋️ 入力欄の文字色
--van-stepper-input-disabled-text-colorvar(--van-text-color-3)🚫 無効入力欄の文字色
--van-stepper-input-disabled-backgroundvar(--van-active-color)🚫 無効入力欄の背景色
--van-stepper-radiusvar(--van-radius-md)🔄 ステッパーの角丸サイズ

よくある質問

なぜ value が string 型になることがある?

ユーザー入力の途中で小数点や空値(例:1.)が発生する場合があり、その際は文字列型が出力されます。

value を number 型に保ちたい場合は、v-model に number 修飾子を付与してください:

html

🔗 関連ドキュメント

📝 フォームコンポーネント

📊 表示コンポーネント

💬 フィードバックコンポーネント

🛠️ ツールコンポーネント

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