• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. GSAPでMotionPathプラグインを使ってパスに沿ったアニメーションを実装してみる

GSAPでMotionPathプラグインを使ってパスに沿ったアニメーションを実装してみる

  • 2024.03.31
  • プログラミング
  • GSAP
Updated: 2024.04.01
GSAPには様々なアニメーションを実装するために便利な拡張プラグインがたくさん用意されています。有料のものもありますが無料で利用できるものも結構あるので使わない手はないですよね。今回はその中で「MotionPath」プラグインをつかってパスに沿って要素をアニメーションさせてみたいと思います。   (過去の参考記事もどうぞ) React(JSX・TSX)のコンポーネントでGSAPを使ってみる #2:スクロール固定表示のアニメーション React(JSX・TSX)のコンポーネントでGSAPを使ってみる #1:要素のアニメーション GSAPとvivusを使ったSVGのドローアニメーション GSAPでScrollTriggerプラグインを使ったスクロール固定表示アニメーションの応用 GSAPでFlipプラグインを使って要素の移動やサイズ変化にトランジションのアニメーションをつける#1:基本編 GSAPでScrollTriggerプラグインを使ってスクロールに対応したアニメーションを実装してみる#3:スクロールで固定表示 GSAPでScrollTriggerプラグインを使ってスクロールに対応したアニメーションを実装してみる#2:スクロール量に連動 GSAPでScrollTriggerプラグインを使ってスクロールに対応したアニメーションを実装してみる#1:基本編 JavaScriptのアニメーションライブラリ「GSAP」を使ってみる   これまでにもGSAPのプラグインでは「ScrollTrigger」や「Flip」プラグインを使ってきましたが、今回も同様にプラグインのソースコードを追加で読み込んで実装していきます。
import { gsap } from 'gsap';
import { MotionPathPlugin } from 'gsap/MotionPathPlugin';
gsap.registerPlugin(MotionPathPlugin);
  もちろんCDNでも利用可能です。GSAPのコアとプラグインのスクリプトを読み込みます。
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/VERSION/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/VERSION/MotionPathPlugin.min.js"></script>
   
1. パスに沿って要素を動かすアニメーション
まずは基本的な形となるパスに沿って要素を動かしていくパターンです、HTML側では動きの軌道となる対象のパスが必要になります、これはSVGで用意しますがインラインで記述していきます。またCSSではデザインに合わせてパスのストロークなどを指定します。ここでは塗りは不要としていますので設定していません。そして、動かす要素も合わせて用意します。もちろん画像やテキストでもOKです。注意点としては、対象となるパスは「path」要素にしておく必要があります。
// HTML
<svg viewBox="0 0 775 360" xmlns="http://www.w3.org/2000/svg">
  <path
    class="js-target-path"
    d="M.5 198C51.833 ......"
    fill="none"
  />
</svg>
<span class="js-animation-element"></span>

// CSS
svg {
  stroke: #999;
  stroke-dasharray: 12px;
  stroke-dashoffset: 12px;
  stroke-width: 3px;
  stroke-linejoin: round;
  stroke-linecap: round;
}
  続いてスクリプトの方も見ていきます。これまでのプラグイン同様に、プラグイン用のオプションに合わせて指定していきます。「path」と「align」については基本的には軌道となるパスの要素を指定する形になります。「autoRotate」をtrueにしておくとパスに沿って垂直の姿勢を保ったまま動いてくれるようにになります。「repeat」はアニメーションの繰り返し回数を指定しますが、負の数を設定すると何回も繰り返しアニメーションが実行されるようになります。
gsap.to('.js-animation-element', {
  motionPath: {
    path: '.js-target-path',
    align: '.js-target-path',
    alignOrigin: [0.5, 0.5],
    autoRotate: true,
    start: 0,
    end: 1
  },
  repeat: -1,
  repeatDelay: 0,
  transformOrigin: '50% 50%',
  duration: 10,
  ease: 'power2.inOut'
});
  たったこれだけでパスに沿ったアニメーションを実装することができます。上記作成したサンプルはこちらで確認いただけます。    
2. パスに沿ったループアニメーション
続けて別のパターンも見ていきます。ここでは円形のパスにあわせてテキストをループさせるアニメーションを作成してみます。見た目だけ同じであれば、円形のパスに沿ったテキストのイメージ画像を用意して、CSSのanimationで回転させる方法などもありますが、SVGで実装できるのが大きなメリットですね。まずはHTMLを見ていきます。先程と同様に軌道となるパスとアニメーションさせる要素を用意します。今回はパスに沿ってテキストを整列させて配置していくため、テキスト要素をSVGの中で扱うようにしています。また、テキストは個別の要素として用意しておきます。テキスト要素はCSSでスタイリングさせることもできますのでデザインにあわせて調整が可能です。
// HTML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
  <path
    class="js-target-path"
    d="M150 250c-55.228 ....."
    fill="none"
  />
  <g class="text-group">
    <text class="js-animation-element">h</text>
    <text class="js-animation-element">e</text>
    <text class="js-animation-element">l</text>
    <text class="js-animation-element">l</text>
    <text class="js-animation-element">o</text>
    <text class="js-animation-element">w</text>
    <text class="js-animation-element">o</text>
    <text class="js-animation-element">r</text>
    <text class="js-animation-element">l</text>
    <text class="js-animation-element">d</text>
  </g>
</svg>

// CSS
.text-group {
  font-weight: bold;
  text-transform: uppercase;
  fill: #f0f;
  stroke: none;
  font-size: 32px;
}
  ではスクリプトも見ていきます。基本的な形は先程とあまり変わりませんが、今回は複数のテキスト要素を同時にアニメーションさせていくため、「gsap.utils.toArray」で全ての要素を取得し、それぞれの要素に対してアニメーションを設定していきます。パスに沿ってテキストの配置位置をずらしていくため、「start」と「end」の値を配列のインデックスをつかって配置場所を円状のパスに対して等間隔になるよう調整していきます。
gsap.utils.toArray('.js-animation-element').forEach((element, index) => {
  gsap.to(element, {
    motionPath: {
      path: '.js-target-path',
      align: '.js-target-path',
      alignOrigin: [0.5, 0.5],
      autoRotate: true,
      start: index * 0.09,
      end: (index * 0.09) + 1
    },
    repeat: -1,
    repeatDelay: 0,
    yoyo: false,
    transformOrigin: '50% 50%',
    duration: 10,
    ease: 'none'
  });
});
  「yoyo」のオプションをtrueにすることで、アニメーション終了後に逆再生でアニメーションをさせることもできますが、今回は同じ動きを繰り返すループアニメーションのため、falseに設定しておきます。これで円形のパスに沿ったループアニメーションができました。上記作成したサンプルはこちらで確認いただけます。   MotionPathプラグインでは各種プロパティを設定することで、細かいところまでアニメーションを調整することが可能です。以下プロパティの一部をまとめています。  
motionPath.path 要素をモーションさせる軌道となるパスを指定
motionPath.align アニメーションさせる対象の配置させる基準を指定
motionPath.alignOrigin アニメーションさせる要素と軌道となるパスを合わせる点を指定、それぞれx軸とy軸の座標を配列で指定
motionPath.autoRotate パスに対して自動でアニメーション要素を回転させる、デフォルトではパスのラインに対して垂直になる
motionPath.start パス上にあるアニメーションの開始点、0と1がそれぞれパスの起点と終点になる
motionPath.end パス上にあるアニメーションの終了点、0と1がそれぞれパスの起点と終点になる
  また、MotionPathプラグインにはメソッドも用意されており、パスの長さや座標データ、circle要素やrect要素をpath要素に変換する処理などがあります。  
MotionPathPlugin.getLength() 対象となるパスの長さを取得、引数には対象のパス要素を入れる
MotionPathPlugin.getRawPath() 対象となるパスのデータを取得、パスの長さだけでなく、d属性の値やアンカーポイントの数などを取得できます、引数には対象のパス要素を入れる
MotionPathPlugin.convertToPath() circle要素、rect要素、ellipse要素などをpath要素に変換します、引数には変換する要素を入れる
 
  今回はGSAPのMotionPathプラグインを使ってパスに沿って要素を動かすアニメーションを作成してみました。パスに沿って動かすことでより不規則でオリジナリティがある動きを表現できるのでぜひ活用していきたいですね。
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact