LoginSignup
3
4

More than 1 year has passed since last update.

Vue3で手軽にカルーセルを実装したい

Last updated at Posted at 2022-07-28

はじめに

  • 普段、BEとWebのFEを体感8:2くらいの割合でやっているので、ガッツリFEをやると、そのたび浦島太郎状態になので、そこでの発見を小出しに書いてみようと思います

Vue3でvue-slickがサポートされていなかった

  • Vue3は2020年9月リリースということで特段新しいというわけでもないのですが、新しいものを作るならばと使ってみることにしました。
  • で、Webサービスでよく見かけるカルーセルを例によって作ることになり「まぁ、vue-slick使えばできるからいいだろう」とたかを括っていたのですが、Vue3はサポート対象外。。。
  • そこで代案として探していた中で扱いやすそうだった vue3-carousel を触ってみることにしました。( vue3 と関するだけあってちゃんとVue3で使えます)

スクリーンショット 2022-07-28 20.15.49.png

cf. https://www.npmjs.com/package/vue-slick

vue3-carousel使ってみる

  • リファレンスのままですが、下記コードのみでカルーセルを表現できます。コードが短い!
$ npm install vue3-carousel

or

yarn add vue3-carousel
<template>
  <carousel :items-to-show="1.5">
    <slide v-for="slide in 10" :key="slide">
      {{ slide }}
    </slide>

    <template #addons>
      <navigation />
      <pagination />
    </template>
  </carousel>
</template>

<script>
// If you are using PurgeCSS, make sure to whitelist the carousel CSS classes
import 'vue3-carousel/dist/carousel.css';
import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel';

export default {
  name: 'App',
  components: {
    Carousel,
    Slide,
    Pagination,
    Navigation,
  },
};
</script>

<style lang="scss" scoped>
// とりあえず見れるように
.carousel__slide {
  height: 200px;
  background-color: red;

  &:nth-child(2n) {
    background-color: green;
  }
}
</style>

スクリーンショット 2022-07-28 22.43.45.png

スクリーンショット 2022-07-28 22.43.51.png

カスタマイズ

  • 1画面内にいくつスライドを表示するかであったり、自動設定があったり、画面サイズごとに設定を変えられたりといった見た目の変更も可能です。
    • ※ 詳細は以下を参照ください

cf. https://ismail9k.github.io/vue3-carousel/getting-started.html#available-props

<script>
// If you are using PurgeCSS, make sure to whitelist the carousel CSS classes
import 'vue3-carousel/dist/carousel.css';
import { Carousel, Slide, Pagination, Navigation } from 'vue3-carousel';

export default {
  name: 'App',
  components: {
    Carousel,
    Slide,
    Pagination,
    Navigation,
  },
  // 以下追加
  data() {
    return {
      breakpoints: {
        500: {
          itemsToShow: 1.5,
        },
        780: {
          itemsToShow: 6,
        }
      }
    }
  }
};
</script>
  • 500px以上ならスライド1.5枚表示

スクリーンショット 2022-07-28 23.10.46.png

  • 780px以上ならスライド6枚表示

スクリーンショット 2022-07-28 23.10.51.png

参考

おわりに

  • 昨年末から投稿が滞っておりましたが、そろそろ今年の年末(アドベントカレンダー)を見据えて記事を書いていこうと思います
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4