Skip to content

Swipe スワイプ - Vant 4

Swipe スワイプ

紹介

画像やコンテンツのグループを循環表示します。

導入

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

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

コード例

基本用法

各 SwipeItem は 1 枚のスライドを表します。autoplay 属性で自動再生の間隔を設定できます。

html

遅延レンダリング

画像を含む場合は lazy-render 属性で遅延レンダリングを有効化できます。遅延レンダリングでは、現在のページと次のページのみがレンダリングされます。

html
js
exportdefault { setup() { const images = [ 'https://fastly.jsdelivr.net/npm/@vant/assets/apple-1.jpeg', 'https://fastly.jsdelivr.net/npm/@vant/assets/apple-2.jpeg', ]; return { images }; }, };

change イベントの監視

各ページのスワイプが終了すると change イベントが発火します。

html
js
import { showToast } from'vant'; exportdefault { setup() { constonChange = (index) => showToast('現在の Swipe のインデックス:' + index); return { onChange }; }, };

縦方向スクロール

vertical 属性を設定するとスライドが縦方向に並びます。この場合、スライドコンテナの高さを指定してください。

html

スライドサイズのカスタマイズ

スライドのデフォルト幅は 100% です。width 属性で単一スライドの幅を、縦スクロールモードでは height 属性で高さを設定できます。

html

現時点ではループモードでスライドサイズのカスタマイズはできません。loopfalse に設定してください。

インジケータのカスタマイズ

indicator スロットでインジケータのスタイルをカスタマイズできます。

html

API

Swipe Props

属性名説明デフォルト
autoplay自動再生の間隔(ms)*numberstring*
durationアニメーション時間(ms)*numberstring*
initial-swipe初期位置のインデックス*numberstring*
widthスライドの幅(px)*numberstring*
heightスライドの高さ(px)*numberstring*
loopループ再生を有効にするかbooleantrue
show-indicatorsインジケータを表示するかbooleantrue
vertical縦方向スクロールにするかbooleanfalse
touchableジェスチャーでスワイプ可能かbooleantrue
stop-propagationスワイプイベントのバブリングを防止するかbooleantrue
lazy-render未表示のスライドを遅延レンダリングするかbooleanfalse
indicator-colorインジケータの色string#1989fa

Swipe Events

イベント名説明コールバック引数
change各ページのスワイプ終了後に発火index: number
drag-start v4.0.9ユーザーがドラッグを開始したときに発火{ index: number }
drag-end v4.0.9ユーザーがドラッグを終了したときに発火{ index: number }

SwipeItem Events

イベント名説明コールバック引数
clickクリック時に発火event: MouseEvent

Swipe メソッド

ref で Swipe のインスタンスを取得してメソッドを呼び出せます。詳細はコンポーネントインスタンスのメソッドを参照してください。

メソッド名説明引数戻り値
prev前のスライドに切り替え--
next次のスライドに切り替え--
swipeTo指定位置へ切り替えindex: number, options: SwipeToOptions-
resize外側要素のサイズや表示状態が変化したときに再描画をトリガー--

型定義

コンポーネントは以下の型をエクスポートします:

ts
importtype { SwipeProps, SwipeInstance, SwipeToOptions } from'vant';

SwipeInstance はコンポーネントインスタンスの型です。使用例:

ts
import { ref } from'vue'; importtype { SwipeInstance } from'vant'; const swipeRef = ref<SwipeInstance>(); swipeRef.value?.next();

SwipeToOptions 形式

名前説明
immediateアニメーションをスキップするかboolean

Swipe Slots

名前説明パラメータ
defaultスワイプコンテンツ-
indicatorカスタムインジケータ{ active: number, total: number }

テーマカスタマイズ

スタイル変数

コンポーネントは以下の CSS 変数を提供します。使用方法は ConfigProvider コンポーネント を参照してください。

変数名デフォルト値説明
--van-swipe-indicator-size6px-
--van-swipe-indicator-marginvar(--van-padding-sm)-
--van-swipe-indicator-active-opacity1-
--van-swipe-indicator-inactive-opacity0.3-
--van-swipe-indicator-active-backgroundvar(--van-primary-color)-
--van-swipe-indicator-inactive-backgroundvar(--van-border-color)-

よくある質問

スワイプ時に click が発火するのはなぜ?

この現象はプロジェクトに fastclick を導入している場合に発生しがちです。fastclick は Touch イベントから click を擬似的に生成しますが、Swipe は内部で touchmove のバブリングをデフォルトで抑止するため、その判定が干渉されて問題が起きます。

Swipe コンポーネントの stop-propagationfalse に設定すると回避できます。

デスクトップでは操作できない?

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

Swipe コンポーネントの機能が少なく、複雑な効果を実現できない?

Vant の Swipe は軽量な設計のため機能は基本的なものに絞られています。より複雑なスライダー効果が必要な場合は、vue-awesome-swiper などのコミュニティライブラリの利用をおすすめします。

コンポーネントが非表示から表示に切り替わると正しく描画されない?

Swipe はマウント時に自身の幅を取得してスライド位置を計算します。最初にコンポーネントが非表示の場合、取得される幅が常に 0 となり、正しく位置計算ができません。

解決方法

方法1:v-show で表示制御している場合は v-if に置き換えると解決します。

html

方法2:コンポーネントの resize メソッドを呼び出して再描画を強制します。

html
js
this.$refs.swipe.resize();

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