Vue Splide
Vueインテグレーション
概要
Vue SplideはSplideをVueプロジェクトに導入するためのパッケージです。
最新版はVue 3のみにしか対応していません。古いバ ージョン(0.3.5)を使用すればVue 2で動かすこともできますが、SSRの問題に注意してください。
インストール
最新版を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 }"><SplideSlide><imgsrc="image1.jpg"alt="Sample 1"></SplideSlide><SplideSlide><imgsrc="image2.jpg"alt="Sample 2"></SplideSlide></Splide></template>Vue
<template>
<Splide :options="{ rewind: true }">
<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/splide/dist/css/splide.min.css';// またはimport'@splidejs/splide/dist/css/themes/splide-skyblue.min.css';JavaScript
import '@splidejs/splide/dist/css/splide.min.css'; // または import '@splidejs/splide/dist/css/themes/splide-skyblue.min.css';
Props
options
options: OptionsSplideのオプション をオブジェクトで渡します。
<Splide:options="yourOptions"></Splide>Vue
<Splide :options="yourOptions"></Splide>
このプロパティはリアクティブであり、値を更新するとスライダー自身も更新されますが、読み取り専用のオプションは変更しないでください。
extensions
extensions: Record<string, ComponentConstructor>エクステンションをオブジェクト形式で追加します。
transition
transition: ComponentConstructorトランジションコンポーネントを上書きます。
hasSliderWrapper
hasSliderWrapper: booleanトラック要素をスライダー要素で囲むかどうかを決めます。
スロット
スライダー内に追加で要素をレンダリングする目的で、いくつかのスロットが用意されています。たとえば矢印をカスタマイズする場合などに用います。
<Splide>...<template#after-track><divclass="splide__autoplay"><buttonclass="splide__play">Play</button><buttonclass="splide__pause">Pause</button></div></template></Splide>Vue
<Splide>
...
<template #after-track>
<div class="splide__autoplay">
<button class="splide__play">Play</button>
<button class="splide__pause">Pause</button>
</div>
</template>
</Splide>
before-track | トラック要素の前に位置する |
|---|---|
after-track | トラック要素の後に位置する |
before-slider | スライダー要素の前に位置する。 |
after-slider | スライダー要素の後に位置する。 |
イベント
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"><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">
<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>