Lottie-web でタッチ操作対応アニメーションを実装する:3ステップガイド

Lottie-web を用いて、静的な JSON アニメーションをユーザーのタッチ・ジェスチャーに反応するインタラクティブな体験へと進化させる方法を、実践的な手順で解説します。SVG ベースの軽量レンダリングと、柔軟な JavaScript イベント連携により、滑らかなモバイル対応インタラクションが実現可能です。

ステップ1:Lottie アニメーションデータの準備

対応する JSON 形式のアセットが必要です。以下のいずれかの手段で入手できます:

  • After Effects + Bodymovin プラグインでエクスポート
  • Lottie Files や Lottie Community から公開済みのアセットを取得(例:animations/transition.json
  • オンラインジェネレーターで簡易アニメーションを生成

ステップ2:ライブラリの導入と初期化

プロジェクトへの統合は、パッケージマネージャーまたは CDN のどちらでも可能です。

npm 経由でのインストール:

npm install lottie-web

CDN 経由での読み込み(HTML head 内):

<script src="https://cdn.jsdelivr.net/npm/lottie-web@5.12.2/build/player/lottie.min.js"></script>

基本的な初期化スクリプト:

const stage = document.querySelector('#lottie-stage');
const player = lottie.loadAnimation({
  container: stage,
  path: 'animations/interactive-button.json',
  renderer: 'svg',
  loop: false,
  autoplay: false
});

ステップ3:ジェスチャー制御の実装

Lottie-web 自体はジェスチャーAPIを提供しませんが、ネイティブイベントとの連携で高精度な操作が可能です。

単一タップによる再生/一時停止切り替え:

stage.addEventListener('click', () => {
  if (player.isPaused) player.play();
  else player.pause();
});

スワイプによるフレーム位置制御(水平方向):

let originX = 0;
let baseFrame = 0;

stage.addEventListener('touchstart', (e) => {
  originX = e.touches[0].clientX;
  baseFrame = player.currentFrame;
  player.pause();
});

stage.addEventListener('touchmove', (e) => {
  e.preventDefault();
  const x = e.touches[0].clientX;
  const delta = x - originX;
  const targetFrame = Math.round(baseFrame + delta * 0.8);
  player.goToAndStop(Math.max(0, Math.min(player.totalFrames, targetFrame)), true);
});

stage.addEventListener('touchend', () => {
  player.play();
});

状態監視イベントの活用

アニメーションライフサイクルに応じた処理を追加するには、以下のイベントハンドラが有効です:

// 読み込み完了後
player.addEventListener('DOMLoaded', () => console.log('ロード完了'));

// 各フレーム描画時(パフォーマンスに注意)
player.addEventListener('enterFrame', (e) => {
  if (e.currentTime > 2.5) player.setSpeed(0.7);
});

// 再生終了時
player.addEventListener('complete', () => player.goToAndPlay(0, true));

タグ: lottie-web svg-animation touch-interaction

7月22日 00:23 投稿