アニメーションのライブラリ「anime.js」を使用して、SVG要素を動かしていきます。
以前の記事では「ビットマップのトレース」機能を使って自動でパスを作成していましたが、今回は「ペンツール」で一本ずつパスを作成していきます。
使用するイラスト
今回の作業で使用するイラストです。
© Unity Technologies Japan/UCL
イラストの加工
今回もフリーのドローソフト(ベクトル画像編集ソフトウェア)「Inkscape」を使用します。
「ファイル > 開く」で使用するイラストを開きます。
イラストが選択された状態で「フィルター > イメージペイントとドロー > イメージドローイング・基本」をクリックします。
「ファイル > PNG画像にエクスポート」で元となる画像を保存します。
エクスポート領域を[ページ]として、画像サイズをページと同じ値に設定します。
パスの作成
フィルターで表示された線を「ペンツール」でなぞることでパスを作成していきます。
「フィル/ストローク」でストロークに色をつけると線の確認が楽になります。
アニメーションで表示する線を全て「ペンツール」でなぞります。
パスの作成が完了したら「ファイル > 保存」でSVGファイルとして保存します。
anime.jsの設定
パスが完成したので「anime.js」の初期設定を行います。
「anime.js」は公式サイトからダウンロードすることができます。
ダウンロードしたファイルを解凍し、HTMLドキュメントに<script>タグを使って「anime.min.js」を指定することで、使用することができます。
<script src="anime.min.js"></script>
手書き風アニメーションの作成
「anime.js」で手書き風のアニメーションを作成していきます。
例として下記のように記述します。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" class="Layer_1" version="1.1"> <defs> <mask id="clipMask"> <path id="a1-1" stroke="#fff" stroke-width="1" d="...<省略>..."/> <path id="a1-2" stroke="#fff" stroke-width="1" d="...<省略>..."/> <path id="a1-3" stroke="#fff" stroke-width="2" d="...<省略>..."/> <path id="a1-4" stroke="#fff" stroke-width="1" d="...<省略>..."/> <path id="a1-5" stroke="#fff" stroke-width="1" d="...<省略>..."/> <path id="a2-1" stroke="#fff" stroke-width="0.5" d="...<省略>..."/> ・ ・ ・ </mask> </defs> <image xlink:href="Listening.png" mask="url(#clipMask)"></image> </svg>
<image>タグの部分には「PNG画像にエクスポート」で保存した画像を配置します。
d=”…”の部分には、InkscapeでSVGとして保存したファイルをテキストエディタ(下の画像ではAtom)で開き、そこから値をコピーします。
テキストエディタ
テキストエディタ(英語: text editor)とはコンピュータで文字情報(テキスト)のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア(プログラム)である。. . . . . Windowsのメモ帳や、macOSのテキストエディット、UNIXのvi、Emacsなど、多くのオペレーティングシステム (OS) やデスクトップ環境に最初から装備されている。
引用:Wikipedia
var animObj_1 = anime({targets:'#a1-1',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:1000,delay:0 }); var animObj_2 = anime({targets:'#a1-2',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:1000,delay:1000 }); var animObj_3 = anime({targets:'#a1-3',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:1000,delay:2000 }); var animObj_4 = anime({targets:'#a1-4',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:1000,delay:3000 }); var animObj_5 = anime({targets:'#a1-5',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:500,delay:4000 }); var animObj_6 = anime({targets:'#a2-1',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:1000,delay:4500 }); ・ ・ ・
targetsでパスのIDを指定して、それぞれにパラメータを設定しています。
duration:アニメーションの継続時間を指定する。 単位:ミリ秒
delay:アニメーションが開始される時間を指定する。 単位:ミリ秒
サンプルアニメーション
今回の作業で作成したパスのサンプルアニメーションです。
クリックでGIFアニメーションが再生されます