自社サイトのリニューアルを行いました。 その際にLottieと呼ばれるライブラリを使用してアニメーションを実装しました。
この記事ではLottieの使い方について紹介いたします。
LottieとはWeb・iOS・Android・React Nativeなどでアニメーションを簡単に実装することが可能なライブラリです。
Adobe After Effectsで作成したアニメーションをjsonファイルとして書き出し、そのファイルをLottieコンポーネントが呼び出すことでアニメーションが描画されます。
アニメーション作成から画面に描画するまでには下記の手順を行う必要があります。
手順
手順1と2についてはIllustratorとAfter Effectsの使い方の説明になってしまうので今回は説明を省きます。
After Effectsでのアニメーション作成する際にはLottieでは対応していない機能があるので注意してください。
対応していない機能についてはこちらからチェックしてください。
またエンジニアの方や実装から入りたい方はLottieFilesより無料でLottie用のjsonファイルをダウンロードして使用することが可能です。
アニメーションが作成できたら、jsonファイルに書き出すためにBodymovinをAfter Effectsにインストールする必要があります。
Bodymovinのインストールの方法は「Adobeからダウンロードする」か「Githubからダウンロードする」か大きく分けて2通りあります。
今回はGithubからダウンロードする手順を紹介します。
まずは下記のサイトから「ZXP Installer」をダウンロードしてください。 こちらのアプリはAfter Effectsにエクステンションを追加する為に必要なインストーラーです。
次にBodymovinをダウンロードします。
Bodymovinがダウンロードできたら、ZXPInstallerを開きファイルをドラッグ&ドロップするとAfterEffectsでBobymovinが使えるようになります。
[ウィンドウ]→[エクステンション]→[Bodymovin]を選択します。
すると下記の画面が出てくると思います。
アニメーションとしてjsonファイルで書き出したいデータのSelectedにチェックを入れ、右の[…]をクリックし保存場所を選択します。
Renderをクリックするとアニメーションがjsonファイルとして書き出されます。
失敗した場合、「編集」>「環境設定」>「スクリプトとエクスプレッション」→「スクリプトによるファイルへの書き込みとネットワークへのアクセスを許可」にチェックが入っているか確認してください。
下記のURLにアクセスし、書き出したファイルをドラッグ&ドロップするとアニメーションの確認が可能です。 Lottie Files Preview
Reactでアニメーションを描画していきましょう。 まずはライブラリをインストールします。
yarn add lottie-react
LottieコンポーネントのanimationDataPropsにjsonファイルを渡すと描画されます。
import Lottie from "react-lottie";
import Animation from "animation.json";
const Example = () => {
return <Lottie animationData={Animation} />;
};
export default Example;
よくある実装パターンとして、ボタン押下時にアニメーションを再生させるケースが多いと思います。 送信時の待機画面などのユーザーがアクションを起こした際に使えます。
import Lottie from "react-lottie";
import Animation from "animation.json";
const Example = () => {
const [playing, setPlaying] = useState<boolean>();
const defaultOption = {
loop: false,
autoplay: false,
animationData: Animation,
};
return (
<div>
<button
onClick={() => {
setPlaying(true);
}}
>
再生
</button>
<Lottie options={defaultOption} isClickToPauseDisabled={true} isStopped={!playing} />
</div>
);
};
export default Example;
Lottieコンポーネントはデフォルトの状態だと、自動で再生され、ループされるようになっているので 再生とループしないようにloopとautoplayをfalseにします。
const defaultOption = {
loop: false,
autoplay: false,
animationData: Animation,
};
ボタンをクリックした際にアニメーションを動かしたいので、状態をstateで管理します。
const [playing, setPlaying] = useState<boolean>();
<button
onClick={() => {
setPlaying(true);
}}
>
再生
</button>
Lottieコンポーネントに先ほどのdefaultOptionを渡します。
svgをクリックした時にデフォルトだとアニメーションの停止・再生が可能になっていますが、isClickToPauseDisabledでこの挙動を制御可能です。 今回のケースはボタンで再生開始の制御を行うので、isClickToPauseDisabledをtrueにし、挙動を無効にしておきます。
後はisStoppedにstateの状態を渡すとボタンをクリックした際に停止の状態が切り替わり、再生されるようになります。
<Lottie options={defaultOption} isClickToPauseDisabled={true} isStopped={!playing} />
Lottieコンポーネントはイベントリスナーにも対応しており、コールバック処理も可能です。 eventNameについて
下記のように再生後の処理なども簡単に実装することが可能です。
<Lottie
eventListeners={[
{
eventName: 'complete',
callback: () => example(),
},
]}
/>
Lottieの使い方について紹介しました。cssのみの実装だと時間がかかる複雑なアニメーションも簡単に実装することが可能です。
またデザイナーとエンジニアとのコニュニケーションもjsonファイル一つで済むので手軽に変更ができるので助かりますね。
アニメーションを実装する際の選択肢の一つに入れてみるといいと思います。