目次
vue-agileとは
vue-agileは、Slickに触発されたVue.jsのカルーセルスライダーコンポーネントライブラリです。
サムネイルナビ付きのスライダーを実装することが可能です。
【ファイル容量:607 KB】
環境
Vue | 2.6.10 |
vue-agile | 1.0.11 |
インストール
以下のnpm、CDNを使ってインストールします。
npm
npm install vue-agile
yarn
yarn add vue-agile
CDN
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vue-agile@1.0.11/dist/VueAgile.css"> <script src="https://cdn.jsdelivr.net/npm/vue-agile@1.0.11/dist/VueAgile.umd.min.js"></script>
gitリポジトリは以下から取得できます。
https://github.com/lukaszflorczak/vue-agile
導入手順
1. ライブラリの取り込み
(1)ES6等の場合 [注意]モジュール版は未検証です。
import VueAgile from 'vue-agile'
(2)CDNの場合
const VueAgile = window['VueAgile'];
2.メソッドを設定
上記で取得したVueAgileを components
に取り込みます。
new Vue({ el: '#app', components: { 'agile':VueAgile } });
3. テンプレートを準備
<agile>
を設置します。
スライドとして扱いたいタグにClassの slide
を設定します。
[注意] サンプルはケバブケースで記載しています。
<div id="app"> <agile :autoplay="true" :autoplay-speed="5000"> <div class="slide" v-for="n in 4"> <h3>slide {{n}}</h3> </div> </agile> </div>
4. スタイルを適用
デフォルトだとスタイルが無いので以下を適用します。
.agile__actions{ margin-top: 20px } .agile__nav-button { background: transparent; border: none; color: #ccc; cursor: pointer; font-size: 24px; transition-duration: .3s; } .agile__nav-button:hover { color: #888 } .agile__dot{ margin: 0 10px; } .agile__dot button{ background-color: #eee; border: none; border-radius: 50%; cursor: pointer; display: block; height: 10px; font-size: 0; line-height: 0; margin: 0; padding: 0; transition-duration: .3s; width: 10px; } #app .agile__dot--current button, #app .agile__dot:hover button{ background-color: #888 } #app .slide { align-items: center; color: #fff; display: flex; height: 300px; justify-content: center; background-color: #f1c40f; } .slide h3{ font-size: 32px; font-weight: 300; }
サンプル
サムネイルナビスライダー
スクリプト
new Vue({ el: '#app', components: { 'agile':VueAgile }, data: { asNavFor1: [], asNavFor2: [], slides: [ 'https://images.unsplash.com/photo-1453831362806-3d5577f014a4?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1496412705862-e0088f16f791?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1506354666786-959d6d497f1a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1455619452474-d2be8b1e70cd?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1504674900247-0877df9cc836?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1472926373053-51b220987527?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ', 'https://images.unsplash.com/photo-1497534547324-0ebb3f052e88?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&w=650&fit=max&ixid=eyJhcHBfaWQiOjE0NTg5fQ' ], options1: { dots: false, fade: true, navButtons: false }, options2: { autoplay: true, centerMode: true, dots: false, navButtons: false, slidesToShow: 3, responsive: [ { breakpoint: 600, settings: { slidesToShow: 5 } }, { breakpoint: 1000, settings: { navButtons: true } } ] }, }, mounted: function () { this.asNavFor1.push(this.$refs.thumbnails); this.asNavFor2.push(this.$refs.main); } });
HTML
asNavForを使うことで2つのスライダーを同期することができます。
<div id="app"> <agile ref="main" :options="options1" :as-nav-for="asNavFor1" class="main"> <div class="slide" v-for="(slide, index) in slides" :key="index" :class="`slide--${index}`"> <img :src="slide"> </div> </agile> <agile ref="thumbnails" :options="options2" :as-nav-for="asNavFor2" class="thumbnails"> <div class="slide slide--thumbniail" v-for="(slide, index) in slides" :key="index" @click="$refs.thumbnails.goTo(index);" :class="`slide--${index}`"> <img :src="slide"> </div> <template slot="prevButton"><i class="fas fa-chevron-left"></i></template> <template slot="nextButton"><i class="fas fa-chevron-right"></i></template> </agile> </div>
スタイル
今回のスライダー専用のスタイルを適用します。
.main{ margin-bottom: 30px; } .thumbnails { margin: 0 -5px; width: calc(100% + 10px); } .agile__nav-button { background: transparent; border: none; color: #ccc; cursor: pointer; font-size: 24px; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; } .thumbnails .agile__nav-button { position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .thumbnails .agile__nav-button--prev { left: -45px; } .thumbnails .agile__nav-button--next { right: -45px; } .agile__nav-button:hover { color: #888; } .agile__dot { margin: 0 10px; } .agile__dot button { background-color: #eee; border: none; border-radius: 50%; cursor: pointer; display: block; height: 10px; font-size: 0; line-height: 0; margin: 0; padding: 0; -webkit-transition-duration: 0.3s; transition-duration: 0.3s; width: 10px; } .agile__dot--current button, .agile__dot:hover button { background-color: #888; } .slide { -webkit-box-align: center; align-items: center; box-sizing: border-box; color: #fff; display: -webkit-box; display: flex; height: 450px; -webkit-box-pack: center; justify-content: center; } .slide--thumbniail { cursor: pointer; height: 100px; padding: 0 5px; -webkit-transition: opacity 0.3s; transition: opacity 0.3s; } .slide--thumbniail:hover { opacity: 0.75; } .slide img { height: 100%; -o-object-fit: cover; object-fit: cover; -o-object-position: center; object-position: center; width: 100%; }
サンプル
さいごに
Slickに触発されたVue.jsのカルーセルスライダーコンポーネントライブラリでした。
今日はこの辺でー