Swiper Vue.js プラグインは、メインの Swiper ライブラリの一部として NPM を介してのみ利用可能です。
npm i swiper
swiper/vue
は 2 つのコンポーネント Swiper
と SwiperSlide
をエクスポートします。
<template>
<swiper
:slides-per-view="3"
:space-between="50"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue';
// Import Swiper styles
import 'swiper/css';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const onSwiper = (swiper) => {
console.log(swiper);
};
const onSlideChange = () => {
console.log('slide change');
};
return {
onSwiper,
onSlideChange,
};
},
};
</script>
swiper/modules
からインポートされる追加モジュールの一覧を以下に示します。
Virtual
- バーチャルスライドモジュールKeyboard
- キーボードコントロールモジュールMousewheel
- マウスホイールコントロールモジュールNavigation
- ナビゲーションモジュールPagination
- ページネーションモジュールScrollbar
- スクロールバーモジュールParallax
- パララックスモジュールFreeMode
- フリーモードモジュールGrid
- グリッドモジュールManipulation
- スライド操作モジュール(コアバージョンのみ)Zoom
- ズームモジュールController
- コントローラーモジュールA11y
- アクセシビリティモジュールHistory
- 履歴ナビゲーションモジュールHashNavigation
- ハッシュナビゲーションモジュールAutoplay
- 自動再生モジュールEffectFade
- フェード効果モジュールEffectCube
- キューブ効果モジュールEffectFlip
- フリップ効果モジュールEffectCoverflow
- カバフロー効果モジュールEffectCards
- カード効果モジュールEffectCreative
- クリエイティブ効果モジュールThumbs
- サムネイルモジュール<template>
<swiper
:modules="modules"
:slides-per-view="3"
:space-between="50"
navigation
:pagination="{ clickable: true }"
:scrollbar="{ draggable: true }"
@swiper="onSwiper"
@slideChange="onSlideChange"
>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
// import Swiper core and required modules
import { Navigation, Pagination, Scrollbar, A11y } from 'swiper/modules';
// Import Swiper Vue.js components
import { Swiper, SwiperSlide } from 'swiper/vue';
// Import Swiper styles
import 'swiper/css';
import 'swiper/css/navigation';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
// Import Swiper styles
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const onSwiper = (swiper) => {
console.log(swiper);
};
const onSlideChange = () => {
console.log('slide change');
};
return {
onSwiper,
onSlideChange,
modules: [Navigation, Pagination, Scrollbar, A11y],
};
},
};
</script>
navigation.nextEl
、pagination.el
などなしに)これらのパラメータを渡すと、ナビゲーション、ページネーション、スクロールバーに必要な要素を作成することに注意してください。Swiper パッケージには、CSS、Less、SCSS のさまざまなスタイルのセットが含まれています。
swiper/css
- コア Swiper スタイルのみswiper/css/bundle
- ナビゲーション、ページネーションなど、すべてのモジュールスタイルを含むすべての Swiper スタイルモジュールスタイル(バンドルスタイルをすでにインポートしている場合は不要)
swiper/css/a11y
- A11y モジュールに必要なスタイルswiper/css/autoplay
- 自動再生モジュールに必要なスタイルswiper/css/controller
- コントローラーモジュールに必要なスタイルswiper/css/effect-cards
- カード効果モジュールに必要なスタイルswiper/css/effect-coverflow
- カバフロー効果モジュールに必要なスタイルswiper/css/effect-creative
- クリエイティブ効果モジュールに必要なスタイルswiper/css/effect-cube
- キューブ効果モジュールに必要なスタイルswiper/css/effect-fade
- フェード効果モジュールに必要なスタイルswiper/css/effect-flip
- フリップ効果モジュールに必要なスタイルswiper/css/free-mode
- フリーモードモジュールに必要なスタイルswiper/css/grid
- グリッドモジュールに必要なスタイルswiper/css/hash-navigation
- ハッシュナビゲーションモジュールに必要なスタイルswiper/css/history
- 履歴モジュールに必要なスタイルswiper/css/keyboard
- キーボードモジュールに必要なスタイルswiper/css/manipulation
- 操作モジュールに必要なスタイルswiper/css/mousewheel
- マウスホイールモジュールに必要なスタイルswiper/css/navigation
- ナビゲーションモジュールに必要なスタイルswiper/css/pagination
- ページネーションモジュールに必要なスタイルswiper/css/parallax
- パララックスモジュールに必要なスタイルswiper/css/scrollbar
- スクロールバーモジュールに必要なスタイルswiper/css/thumbs
- サムネイルモジュールに必要なスタイルswiper/css/virtual
- バーチャルモジュールに必要なスタイルswiper/css/zoom
- ズームモジュールに必要なスタイルLess スタイルの場合は、インポートパスで css
を less
に置き換えてください(例:)。
import 'swiper/less';
import 'swiper/less/navigation';
import 'swiper/less/pagination';
SCSS スタイルの場合は、インポートパスで css
を scss
に置き換えてください(例:)。
import 'swiper/scss';
import 'swiper/scss/navigation';
import 'swiper/scss/pagination';
Swiper
Vue.js コンポーネントは、すべての Swiper パラメータをコンポーネントプロパティとして受け取り、さらにいくつかの追加プロパティを受け取ります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
tag | 文字列 | 'div' | メインの Swiper コンテナ HTML 要素タグ |
wrapperTag | 文字列 | 'div' | Swiper ラッパー HTML 要素タグ |
Swiper コンポーネントは、Swiper インスタンスをできるだけ早く返す追加の swiper
イベントを含め、すべての Swiper イベントをサポートします。例:
<swiper @swiper="..." @slideChange="..." @reachEnd="..." ...></swiper>
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
tag | 文字列 | 'div' | Swiper スライド HTML 要素タグ |
zoom | ブール | false | ズームモードに必要な追加のラッパーを有効にします。 |
virtualIndex | 数値 | 実際の Swiper スライドインデックス。バーチャルスライドに設定する必要があります。 |
SwiperSlide
コンポーネントには、次のスロットプロパティがあります。
isActive
- 現在のスライドがアクティブな場合は trueisPrev
- 現在のスライドがアクティブなスライドの前のスライドの場合は trueisNext
- 現在のスライドがアクティブなスライドの次のスライドの場合は trueisVisible
- 現在のスライドが表示されている場合は true(watchSlidesProgress
Swiper パラメータを有効にする必要があります)isDuplicate
- 現在のスライドが複製スライドの場合(loop
モードが有効な場合)。例:<swiper>
<swiper-slide v-slot="{ isActive }">
<div>Current slide is {{ isActive ? 'active' : 'not active' }}</div>
</swiper-slide>
</swiper>
Swiper Vue は、Swiper 内のコンポーネントで Swiper インスタンスを簡単に取得するための useSwiper
フックを提供します。
<!-- some-inner-component.vue -->
<template>
<button @click="swiper.slideNext()">Slide to the next slide</button>
</template>
<script>
import { useSwiper } from 'swiper/vue';
export default {
setup() {
const swiper = useSwiper();
return {
swiper,
};
},
};
</script>
useSwiperSlide
は、Swiper スライド内のコンポーネントがスライドデータ(SwiperSlide スロットプロパティと同じデータ)を取得するためのもう 1 つのフックです。
<!-- some-inner-component.vue -->
<template>
<p>Current slide is {{swiperSlide.isActive ? 'active' : 'not active'}}</p>
</template>
<script>
import { useSwiperSlide } from 'swiper/vue';
export default {
setup() {
const swiperSlide = useSwiperSlide();
return {
swiperSlide,
};
},
};
</script>
Swiper Vue.js コンポーネントは、コンテンツの配信に「スロット」を使用します。4 つのスロットが利用可能です。
container-start
- 要素は swiper-container の先頭に追加されます。container-end
(デフォルト)- 要素は swiper-container の末尾に追加されます。wrapper-start
- 要素は swiper-wrapper の先頭に追加されます。wrapper-end
- 要素は swiper-wrapper の末尾に追加されます。例:
<swiper>
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<template v-slot:container-start><span>Container start</span></template>
<template v-slot:container-end><span>Container end</span></template>
<template v-slot:wrapper-start><span>Wrapper start</span></template>
<template v-slot:wrapper-end><span>Wrapper end</span></template>
</swiper>
次のようにレンダリングされます:
<div class="swiper">
<span>Container start</span>
<div class="swiper-wrapper">
<span>Wrapper start</span>
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<span>Wrapper end</span>
</div>
<span>Container end</span>
</div>
ここでのバーチャルスライドのレンダリングは、Vue.js によって完全に処理され、:virtual="true"
プロパティの設定とスライドへの virtualIndex
の設定以外は何も必要ありません。
<template>
<swiper :modules="[Virtual]" :slides-per-view="3" :space-between="50" virtual>
<swiper-slide
v-for="(slideContent, index) in slides"
:key="index"
:virtualIndex="index"
>{{slideContent}}</swiper-slide
>
</swiper>
</template>
<script>
import { Virtual } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
// Create array with 1000 slides
const slides = Array.from({ length: 1000 }).map(
(el, index) => `Slide ${index + 1}`
);
return {
slides,
Virtual,
};
},
};
</script>
コントローラーでは、ある Swiper インスタンスを別の Swiper インスタンスに渡す必要があります。
<template>
<!-- Main Swiper -> pass controlled swiper instance -->
<swiper
:modules="[Controller]"
:controller="{ control: controlledSwiper }"
...
>
...
</swiper>
<!-- Controlled Swiper -> store swiper instance -->
<swiper :modules="[Controller]" @swiper="setControlledSwiper" ...>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Controller } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const controlledSwiper = ref(null);
const setControlledSwiper = (swiper) => {
controlledSwiper.value = swiper;
};
return {
Controller,
controlledSwiper,
setControlledSwiper,
};
},
};
</script>
双方向制御(両方の Swiper が互いに制御する場合)では、次のようになります。
<template>
<swiper
:modules="[Controller]"
@swiper="setFirstSwiper"
:controller="{ control: secondSwiper }"
...
>
...
</swiper>
<swiper
:modules="[Controller]"
@swiper="setSecondSwiper"
:controller="{ control: firstSwiper }"
...
>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Controller } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const firstSwiper = ref(null);
const secondSwiper = ref(null);
const setFirstSwiper = (swiper) => {
firstSwiper.value = swiper;
};
const setSecondSwiper = (swiper) => {
secondSwiper.value = swiper;
};
return {
Controller,
firstSwiper,
secondSwiper,
setFirstSwiper,
setSecondSwiper,
};
},
};
</script>
コントローラーと同様に、サムネイルインスタンスを保存し、メインギャラリーに渡す必要があります。
<template>
<!-- Main Swiper -> pass thumbs swiper instance -->
<swiper :modules="[Thumbs]" :thumbs="{ swiper: thumbsSwiper }" ...>
...
</swiper>
<!-- Thumbs Swiper -> store swiper instance -->
<!-- It is also required to set watchSlidesProgress prop -->
<swiper
:modules="[Thumbs]"
watch-slides-progress
@swiper="setThumbsSwiper"
...
>
...
</swiper>
</template>
<script>
import { ref } from 'vue';
import { Thumbs } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
const thumbsSwiper = ref(null);
const setThumbsSwiper = (swiper) => {
thumbsSwiper.value = swiper;
};
return {
Thumbs,
thumbsSwiper,
setThumbsSwiper,
};
},
};
</script>
次の効果が利用可能です。
効果を使用するには、まず効果をインポートしてインストールする必要があります(他のすべてのモジュールと同様)。
実行中の 効果デモはこちらで確認できます。
<template>
<swiper :modules="[EffectFade]" effect="fade">
<swiper-slide>Slide 1</swiper-slide>
<swiper-slide>Slide 2</swiper-slide>
<swiper-slide>Slide 3</swiper-slide>
...
</swiper>
</template>
<script>
import { EffectFade } from 'swiper/modules';
import { Swiper, SwiperSlide } from 'swiper/vue';
import 'swiper/css';
import 'swiper/css/effect-fade';
export default {
components: {
Swiper,
SwiperSlide,
},
setup() {
return {
EffectFade,
};
},
};
</script>
ご覧のとおり、Swiper を Web サイトやアプリに統合するのは非常に簡単です。次は、次のステップです。