以前にLottieで作成したアニメーションをサイトに組み込む記事を投稿しましたが、今回は組み込んだアニメーションをJavaScriptで制御する方法を試してみます。
サンプルコード
まずは以前の記事でも試した、基本的な埋め込みです。
CDNでプラグインを読み込みます。
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.12.2/lottie.min.js"></script>
アニメーションを埋め込む要素を追加します。
<div id="sample"></div>
要素のサイズを設定します。
#sample { width: 200px; }
最後に、JavaScriptで埋め込みの設定を行います。
const demo = lottie.loadAnimation({ container: document.getElementById('sample'), // アニメーションを追加する要素 renderer: 'svg', // レンダリングのタイプ loop: false, // アニメーションをループさせるかどうか autoplay: false, // アニメーションを自動再生するかどうか path: 'data.json' // アニメーションのjsonファイルのパス });
これでLottieの埋め込みができましたが、設定のloopやautoplayをfalseにしているので、この時点ではアニメーションは開始されません。
Lottieを埋め込むデモページ
埋め込んだLottieのファイルをJavaScriptで制御してみます。
詳しくはドキュメントをご確認ください。
まずはメソッドを試してみます。
<button id="play">play()</button> <button id="stop">stop()</button> <button id="pause">pause()</button> <button id="setSpeed">setSpeed(0.5)</button> <button id="goToAndStop">goToAndStop(400)</button> <button id="goToAndPlay">goToAndPlay(200)</button> <button id="setDirection">setDirection(-1)</button> <button id="destroy">destroy()</button> <button id="getDuration">getDuration()</button> <button id="getDurationTrue">getDuration(true)</button>
document.getElementById('play').addEventListener('click', function() { demo.play(); }); document.getElementById('stop').addEventListener('click', function() { demo.stop(); }); document.getElementById('pause').addEventListener('click', function() { demo.pause(); }); document.getElementById('setSpeed').addEventListener('click', function() { demo.setSpeed(0.5); }); document.getElementById('goToAndStop').addEventListener('click', function() { demo.goToAndStop(400); }); document.getElementById('goToAndPlay').addEventListener('click', function() { demo.goToAndPlay(200); }); document.getElementById('setDirection').addEventListener('click', function() { demo.setDirection(-1); }); document.getElementById('destroy').addEventListener('click', function() { demo.destroy(); }); document.getElementById('getDuration').addEventListener('click', function() { console.log(demo.getDuration()); }); document.getElementById('getDuration').addEventListener('click', function() { console.log(demo.getDuration(true)); });
play() | アニメーションを再生。 再生終了後は終了地点で停止になり、再度再生してもアニメーションが開始されないので、goToAndStop(0)で開始地点に戻すなどの対応が必要になるので注意。 |
---|---|
stop() | アニメーション再生の終了。 状態は開始時点に戻る。 |
pause() | アニメーション再生の一時停止。 状態は停止した地点で止まる。 |
setSpeed(speed) | アニメーションの速度の変更。 speedの初期値は1。 |
goToAndStop(value, isFrame) | 指定した秒数に移動して、一時停止状態にする。 valueは数値でミリ秒を指定。 isFrameにtrueを指定した場合、フレームベースでの指定になる。(初期値はfalse) |
goToAndPlay(value, isFrame) | 指定した秒数に移動して、再生を開始する。 valueは数値でミリ秒を指定。 isFrameにtrueを指定した場合、フレームベースでの指定になる。(初期値はfalse) |
setDirection(direction) | アニメーション再生の方向を変更。 directionの初期値は1(順方向)で、-1で逆方向になる。 |
destroy() | Lottieの埋め込みを破棄。 |
getDuration(inFrames) | アニメーションの秒数またはフレーム数を返す。 inFramesの初期値はfalseで秒数を、trueの場合はフレーム数を返す。 |
次にイベントです。
complete | アニメーション完了後に実行。 アニメーションをstop()やpause()で途中で止めた場合や、loopをtrueにしている場合は実行されない。 デモページ |
---|---|
loopComplete | ループでのアニメーション完了毎に実行。 デモページ |
enterFrame | アニメーションのフレーム変更毎に実行。 デモページ |
destroy | Lottieの埋め込み破棄後に実行。 デモページ |
コメントが承認されるまで時間がかかります。