coiai Logo

カルーセルを作る React TS, react-multi-carousel

カルーセルを作る方法についてのコードです。

Joy UI, react-multi-carousel を使って実装しました。

Joy UI のインストール

Swiperの公式ドキュメントはこちらから。https://swiperjs.com

yarn add swiper

Joy UI はこちらから。個人的な意見恐縮ですが、MUIよりも手軽に使えることから Joy UI を好んで使っています。
↓ get start はこちらから
https://mui.com/joy-ui/getting-started/

yarn add @mui/joy @emotion/react @emotion/styled

カードのスタイルを作る Joy UI

なんでもいいのですが、とりあえずカードのスタイルを作ります。
Joy UI を使用しているので適宜インポートしてください。

        {/* Section Member Staff */}
        <Box sx={{ p: 2, maxWidth: '880px', margin: 'auto', my: 10 }}>
          <Box sx={{ mb: 2 }}>
            <Typography level='h2' sx={{mb: 1}}>施術師</Typography>
            <Typography>スタッフ情報をご紹介します。</Typography>
          </Box>
          <Card sx={{ width: 320, maxWidth: '100%', boxShadow: 'lg' }}>
            <CardOverflow>
              <AspectRatio ratio={1 / 1}>
                <img src="/static/images/avatar/1.jpg" alt="Staff" loading='lazy' />
              </AspectRatio>
            </CardOverflow>
            <CardContent>
              <Typography level="body-sm" >代表</Typography>
              <Typography level="title-lg" >スタッフ名</Typography>
              <Typography level='body-sm'>鍼灸師・柔道整復師</Typography>
            </CardContent>
          </Card>
        </Box>
Card Style with Joy UI

このような感じでスタイリングしました。

一例です。

react-multi-carousel でカルーセルを実装

react-multi-carousel とは何か?

簡単にReactのプロジェクトにカルーセルを実装できるコンポーネントです。

  • アニメーション対応
  • レスポンシブ対応

なのが特に嬉しい点に思いました。

やり方

↓ 以下のドキュメントに従って使えばOK
https://www.npmjs.com/package/react-multi-carousel

インポートして<Carousel>で囲むだけですぐに動作するので簡単で素敵

Carousel with React-multi-carousel

とりあえず最小構成で組んでみましたが、下記ページに作例がたくさん紹介されているので、よりリッチにしたい方は CodeSandbox を見るのが良さそう。

https://codesandbox.io/examples/package/react-multi-carousel

react-multi-carousel の使い方の簡単な解説

コメントアウト付きでオプションの解説をメモしておきました。

// 必要なライブラリをインポート
import React from 'react';
import CarouselLibrary from 'react-multi-carousel'; // カルーセル用のライブラリ
import 'react-multi-carousel/lib/styles.css'; // カルーセルのスタイルシート

// デバイスごとの表示設定を定義
const deviceSettings = {
  desktop: {
    breakpoint: { max: 3000, min: 1024 }, // デスクトップ用の画面幅の範囲
    items: 3, // 一度に表示するアイテム数
    slidesToSlide: 3, // 一度にスライドするアイテム数
  },
  tablet: {
    breakpoint: { max: 1024, min: 464 }, // タブレット用の画面幅の範囲
    items: 2,
    slidesToSlide: 2,
  },
  mobile: {
    breakpoint: { max: 464, min: 0 }, // モバイル用の画面幅の範囲
    items: 1,
    slidesToSlide: 1,
  },
};

// カルーセルコンポーネントの定義
const GeneralCarousel = () => {
  return (
    // CarouselLibraryコンポーネントを使用
    <CarouselLibrary
      swipeable={false} // スワイプ操作を無効化
      draggable={false} // ドラッグ操作を無効化
      showDots={true} // 下部にページング用のドットを表示
      responsive={deviceSettings} // デバイスごとの設定を適用
      ssr={true} // サーバーサイドレンダリングを有効化
      infinite={true} // 無限スクロールを有効化
      autoPlay={true} // 自動再生を有効化
      autoPlaySpeed={3000} // 自動再生の速度を設定(3秒間隔)
      keyBoardControl={true} // キーボード操作を有効化
      customTransition="all .5" // カスタムの遷移アニメーション(0.5秒)
      transitionDuration={500} // 遷移のアニメーション時間を設定
      containerClass="carousel-container" // カスタムスタイルを適用するためのコンテナクラス
      removeArrowOnDeviceType={["tablet", "mobile"]} // 特定のデバイスで矢印を非表示
      dotListClass="custom-dot-list-style" // ドットのカスタムスタイルクラス
      itemClass="carousel-item-padding-40-px" // アイテムの間隔スタイル
    >
      {/* 表示するアイテムを定義 */}
      <div>Content 1</div>
      <div>Content 2</div>
      <div>Content 3</div>
      <div>Content 4</div>
      <div>Content 5</div>
    </CarouselLibrary>
  );
};

// コンポーネントをエクスポート
export default GeneralCarousel;

以上のコードで div タグの部分を先ほど作ったカードに置き換えれば、カードをカルーセルで動作させることができます。

そのほかのコンポーネント

Swiper

https://swiperjs.com
こちらも試してみました。

<Swiper>の子要素に<SwiperSlide>を置くだけでシンプルに使い始められることが利点だと感じました。
また、デモも豊富でリッチなカルーセルを構築できるように思います。

個人的な使用感として、カラム同士のスペースの取り方が使いづらく感じて辞めました。

投稿日: 2025年1月6日
カテゴリ: React
タグ: Carousel, TypeScript
coiai

coiai

この記事もおすすめ

ポッドキャストを取った後Auditionですべきこと

ポッドキャストを取った後Auditionですべきこと

この記事はポッドキャストなどの音声コンテンツを取った後にAuditionで編集する方法について解説しています。 環境 やること 基本的に以下の4つの工程をすると、かなりクオリティアップにつながります! ノイズリダクション 無音部分を選択します。開始地点をi, 終わりをo キーを押すと選択できます。選択できたらエフェクト→ノイズリダクション/リストア→ノイズプリントをキャプチャを押します。 続いて、全体を選択します。cmd, a で全選択になります。エフェクト→ノイズリダクション/リストア→ノイズリダクションを選択します。 以下のようなパネルが表示されうので、ノイズのみをきたりして、削減ちを調整して、良い感じになったら適応ボタンを押します。 シングルバンドコンプレッサ 左のパネルのエフェクトトラックから▶️ボタンを押し、振幅と圧縮→シングルバンドコンプレッッサを選択します。 選択すると下記のようなパネルが開きます。それぞれ、 といった意味があります。設定値は下記画像のようにしています。 設定がめんどくさい場合はプリセットからラジオレベラーを選択してください。 EQ(声をクリアにする) パラメトリックイコライザーを使用します。エフェクト→フィルターとイコライザ→パラメトリックイコライザーを選択します。 私の場合は下記のように設定しています。 無音カット エフェクト→診断→無音をカットをすると左パネルに診断が表示されます。 効果を無音を削除、プリセットをポッドキャストにするとちょうどよくなると思います。設定したら、スキャンボタンを教えて、全て削除で無音がカットされます。 かなりカットされてしまうので、短いCM等に使うのはありかなという感じです。 参考 Adobe 無音カット https://helpx.adobe.com/jp/audition/using/strip-silence.html

MetaStore コンテンツ型のアプリ内課金を実装する

MetaStore コンテンツ型のアプリ内課金を実装する

MetaStoreのコンテンツ型のアプリ内課金を実装する方法についてです。 コンテンツを追加する 右上のアドオンを作成ボタンを押す。 アドオンタイプ 一度購入したら、それ以降は購入しない設定は耐久型を選びます。アプリ内のコインや石など、消耗品は消耗品を選びます。 価格設定 価格設定タブに進むとコンテンツの価格を設定できます。有料のコンテンツをまだ登録したことない場合は支払い情報の設定が住んでいないはずなので、支払い情報の設定が先に必要になります。 DUC データユーズチェックアップ 左メニューの必要条件の中のデータ使用状況の確認を開きます。 例えばIAPでユーザー認識が必要な場合は User ID, ユーザー名が必要な場合は User Profile の追加ボタンを押します。 何に使うかの用途と説明が求められるのでそこに使用用途を記述してください。 ここまで出来たらリクエストを送信ボタンを押します。 このようにデータの取り扱いについて質問されるので答えてください。英語で書いてあるので、なんとなく何が書いてあるか順番にさらっと説明します。 データの使用状況の確認 左サイドバーから必要条件⇒データ使用状況の確認をクリックします。 これが設定されていないと以下の文言のポップアップが表示されます。 読んでくださった方へ 株式会社coiaiでは、Quest向け、PCVR、Vision OS向けの開発も得意としています。新規開発ももちろん、開発途中でメンバーが必要といった場合でも請け負えますので、ご相談ください!

この記事を書いた会社

株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。

商号株式会社 coiai創業2022年1月設立2025年1月23日資本金1,500,000円(設立時点)本社所在地東京都練馬区関町北 3-6-9代表者代表取締役 竹村 啓佑 / 代表取締役 服部 陽良

主なご相談内容

会社概要・役員紹介を見る

詳しい会社情報は会社概要ページでご覧いただけます。

資料請求・無料相談

導入要件のヒアリングからPoC、本番運用まで伴走します。まずはお気軽にご相談ください。

お問い合わせの前に 個人情報保護方針 をご確認ください。