Vue Splide
Vueインテグレーション
概要
Vue SplideはSplideをVue3プロジェクトに導入するためのパッケージです。
インストール
最新版をNPMから取得してください。
$ npm install @splidejs/vue-splide
$ npm install @splidejs/vue-splide
使用方法
コンポーネントの登録
VueSplideプラグインをアプリケーションにインストールしてください。
import{createApp}from'vue';importAppfrom'./App.vue';importVueSplidefrom'@splidejs/vue-splide';constapp=createApp(App);app.use(VueSplide);app.mount('#app');JavaScript
import { createApp } from 'vue'; import App from './App.vue'; import VueSplide from '@splidejs/vue-splide'; const app = createApp( App ); app.use( VueSplide ); app.mount( '#app' ); あるいは、コンポーネントに直接SplideおよびSplideSlideを登録してもかまいません。
<script>import{Splide,SplideSlide}from'@splidejs/vue-splide';exportdefaultdefineComponent({components:{Splide,SplideSlide,},});</script>Vue
<script> import { Splide, SplideSlide } from '@splidejs/vue-splide'; export default defineComponent( { components: { Splide, SplideSlide, }, } ); </script> 登録したら、以下のようにしてスライダーをレンダリングします。
<template><Splide:options="{ rewind: true }"aria-label="お気に入りの写真"><SplideSlide><imgsrc="image1.jpg"alt="Sample 1"></SplideSlide><SplideSlide><imgsrc="image2.jpg"alt="Sample 2"></SplideSlide></Splide></template>Vue
<template> <Splide :options="{ rewind: true }" aria-label="お気に入りの写真"> <SplideSlide> <img src="image1.jpg" alt="Sample 1"> </SplideSlide> <SplideSlide> <img src="image2.jpg" alt="Sample 2"> </SplideSlide> </Splide> </template> CSS
CSSファイルを選択し、インポートしてください。<link>タグで読み込んでも構いません。
// デフォルトのテーマimport'@splidejs/vue-splide/css';// または、ほかのテーマimport'@splidejs/vue-splide/css/skyblue';import'@splidejs/vue-splide/css/sea-green';// あるいは、コアスタイルのみimport'@splidejs/vue-splide/css/core';JavaScript
// デフォルトのテーマ import '@splidejs/vue-splide/css'; // または、ほかのテーマ import '@splidejs/vue-splide/css/skyblue'; import '@splidejs/vue-splide/css/sea-green'; // あるいは、コアスタイルのみ import '@splidejs/vue-splide/css/core';
構成のカスタマイズ
<Splide>はトラック要素をレンダリングしますが、hasTrackと<SplideTrack>を用いれば、別々に管理できます。例えば、次の2つのコンポーネントは、全く同じ結果を出力します。
<Splide><SplideSlide>...</SplideSlide></Splide><Splide:has-track="false"><SplideTrack><SplideSlide>...</SplideSlide></SplideTrack></Splide>Vue
<Splide> <SplideSlide>...</SplideSlide> </Splide> <Splide :has-track="false"> <SplideTrack> <SplideSlide>...</SplideSlide> </SplideTrack> </Splide>
<SplideTrack>を<Splide>から分離することで、矢印やページネーション、あるいはそのほかのコントロール要素を自由に配置できるようになります。例えば、Splideはデフォルトで、矢印をトラック要素の直前にレンダリングしますが、プレースホルダを用いてこの位置を指定できます。
<Splide:has-track="false"aria-label="..."><divclass="custom-wrapper"><SplideTrack><SplideSlide>...</SplideSlide></SplideTrack><divclass="splide__arrows"/></div></Splide>Vue
<Splide :has-track="false" aria-label="..."> <div class="custom-wrapper"> <SplideTrack> <SplideSlide>...</SplideSlide> </SplideTrack> <div class="splide__arrows" /> </div> </Splide>
または、独自の矢印も定義できます。
<Splide:has-track="false"aria-label="..."><SplideTrack><SplideSlide>...</SplideSlide></SplideTrack><divclass="splide__arrows"><buttonclass="splide__arrow splide__arrow--prev">Prev</button><buttonclass="splide__arrow splide__arrow--next">Next</button></div></Splide>Vue
<Splide :has-track="false" aria-label="..."> <SplideTrack> <SplideSlide>...</SplideSlide> </SplideTrack> <div class="splide__arrows"> <button class="splide__arrow splide__arrow--prev">Prev</button> <button class="splide__arrow splide__arrow--next">Next</button> </div> </Splide>
同じようにして、自動再生のトグルボタンや、プログレスバーの表示も行えます。
<Splide:has-track="false"aria-label="..."><SplideTrack><SplideSlide>...</SplideSlide></SplideTrack><divclass="splide__progress"><divclass="splide__progress__bar"/></div><buttonclass="splide__toggle"type="button"><spanclass="splide__toggle__play">Play</span><spanclass="splide__toggle__pause">Pause</span></button></Splide>Vue
<Splide :has-track="false" aria-label="..."> <SplideTrack> <SplideSlide>...</SplideSlide> </SplideTrack> <div class="splide__progress"> <div class="splide__progress__bar" /> </div> <button class="splide__toggle" type="button"> <span class="splide__toggle__play">Play</span> <span class="splide__toggle__pause">Pause</span> </button> </Splide>
あるいは:
<Splide:has-track="false"aria-label="..."><divclass="custom-wrapper"><buttonclass="splide__toggle"type="button"><spanclass="splide__toggle__play">Play</span><spanclass="splide__toggle__pause">Pause</span></button><divclass="splide__progress"><divclass="splide__progress__bar"/></div><SplideTrack><SplideSlide>...</SplideSlide></SplideTrack></div></Splide>Vue
<Splide :has-track="false" aria-label="..."> <div class="custom-wrapper"> <button class="splide__toggle" type="button"> <span class="splide__toggle__play">Play</span> <span class="splide__toggle__pause">Pause</span> </button> <div class="splide__progress"> <div class="splide__progress__bar" /> </div> <SplideTrack> <SplideSlide>...</SplideSlide> </SplideTrack> </div> </Splide>
Props
options
options: OptionsSplideのオプション をオブジェクトで渡します。
<Splide:options="{ rewind: true, gap: '1rem' }"></Splide>Vue
<Splide :options="{ rewind: true, gap: '1rem' }"></Splide> このプロパティはリアクティブであり、値を更新するとスライダー自身も更新されますが、読み取り専用のオプションは変更しないでください。
tag
tag: string = 'div'ルート要素に使用するタグを変更します。後方互換のため、初期値は'div'ですが、'section'を推奨します。
もしheader、footerならびにnavを使用する場合は、適切なランドマークロールも同時に指定する必要があります。そうしないと、不適切なアクセシビリティツリーが出来上がります。
<Splide:tag="section"></Splide>Vue
<Splide :tag="section"></Splide>
extensions
extensions: Record<string, ComponentConstructor>エクステンションをオブジェクト形式で追加します。
transition
transition: ComponentConstructorトランジションコンポーネントを上書きます。
hasTrack
hasTrack: booleanトラック要素をレンダリングするかどうかを決めます。
イベント
Splideコンポーネント経由で、Splide内のすべてのイベントにハンドラを登録できます。ハンドラの関数名はイベント名から生成されますが、先頭に"splide"が付加されます。たとえば、"arrows:mounted"は"splide:arrows:mounted"に変換されます。
<Splide@splide:arrows:mounted="onArrowsMounted"></Splide>Vue
<Splide @splide:arrows:mounted="onArrowsMounted"></Splide>
なお、ハンドラの第一引数は常にSplideのインスタンスで、オリジナルの引数はそのあとに続きます。
functiononArrowsMounted(splide,prev,next){console.log(splide.length);}JavaScript
function onArrowsMounted( splide, prev, next ) { console.log( splide.length ); } Splideインスタンスの取得
Splideインスタンスを取得し直接操作したい場合は、Refオブジェクトを利用します。
<template><Splideref="splide">...</Splide></template><script>import{onMounted,ref}from'vue';exportdefaultdefineComponent({setup(){constsplide=ref();onMounted(()=>{if(splide.value&&splide.value.splide){console.log(splide.value.splide.length);}});return{splide,}},});</script>Vue
<template> <Splide ref="splide"> ... </Splide> </template> <script> import { onMounted, ref } from 'vue'; export default defineComponent( { setup() { const splide = ref(); onMounted( () => { if ( splide.value && splide.value.splide ) { console.log( splide.value.splide.length ); } } ); return { splide, } }, } ); </script> VueがSplideコンポーネントをマウントした後、ref.value.splideを介してインスタンスを取得できます(マウント前はundefinedです)。
サンプル
以下に簡単な例を示します。
12345678910111213141516171819202122232425262728293031<template><Splide:options="options"aria-label="お気に入りの写真"><SplideSlide><imgsrc="image1.jpg"alt="Sample 1"></SplideSlide><SplideSlide><imgsrc="image2.jpg"alt="Sample 2"></SplideSlide></Splide></template><script>import{Splide,SplideSlide}from'@splidejs/vue-splide';import{defineComponent}from'vue';exportdefaultdefineComponent({components:{Splide,SplideSlide,},setup(){constoptions={rewind:true,gap:'1rem',};return{options};},});</script>Vue
<template> <Splide :options="options" aria-label="お気に入りの写真"> <SplideSlide> <img src="image1.jpg" alt="Sample 1"> </SplideSlide> <SplideSlide> <img src="image2.jpg" alt="Sample 2"> </SplideSlide> </Splide> </template> <script> import { Splide, SplideSlide } from '@splidejs/vue-splide'; import { defineComponent } from 'vue'; export default defineComponent( { components: { Splide, SplideSlide, }, setup() { const options = { rewind: true, gap : '1rem', }; return { options }; }, } ); </script> このページで、実際に動作している例を見ることができ、それぞれのソースコードは以下の場所に置いてあります。
v3からの移行方法
v3 からv4へ移行するには、次の手順を参考にしてください。
- 破壊的変更に目を通します
- もしこれらの変更が既存のスライダーに影響を与える場合は、v3からv4への移行を参考に「スライダー要素」以外を修正します
- 下に記載した「廃止されたスロット」を利用している場合は、構成のカスタマイズを参考に、コンポーネントをアップデートします
- CSSを更新します(古いパスのままでも動作しますが、短縮パスも利用可能になりました)
- (任意)あたらしく追加された
i18nを翻訳します - (任意)
aria-labelまたはaria-labelledbyをそれぞれのスライダーに挿入します
以下のスロットは廃止されました。
beforeTrackafterTrackbeforeSliderafterSlider