anime.jsでCSSのtableのセルをドットに見立てて、動かしてみます。
ドット絵サンプル
今回の記事で作成するドット絵の動作確認用サンプルです。
ドット絵の元イラスト
上のサンプルをつくる際に使用したイラストです。
2枚のイラスト(ドット絵)が少しずつ切り替わるように「anime.js」で動きをつけました。
© Unity Technologies Japan/UCL
イラストの加工手順
- Photoshopで元となるイラストを開く。
- 「イメージ > モード > インデックスカラー」を選択する。
- 「インデックスカラー」のダイアログで表示色を設定する。(サンプルは256色)
- 「イメージ > 画面解像度」を選択する。
- 単位を「pixel」としてドット絵のサイズを指定する。(サンプルは25×19)
- 再び「画面解像度」を選択し、単位を「%」として「1000%」程度に拡大する。
- 表示された画像を基本として、色を調整する。
anime.jsの準備
ドット絵が用意できたら[anime.js]の初期設定を行います。
アニメーションのライブラリ[anime.js]は公式サイトからダウンロードすることができます。
ダウンロードしたファイルを解凍し、HTMLドキュメントに<script>タグを使って「anime.min.js」を指定することで、使用することができます。
<script src="anime.min.js"></script>
ドット絵の制御
HTML CSS JavaScriptでドット絵を制御します。
1. HTML
サンプルはtableタグを使用して、縦19 × 横25 でドット絵を作成しています。
例として下記のように記述します。
<table class="dotcontainer"> <tr><td id="a1"></td><td id="a2"></td><td id="a3"></td> ... <td id="ap"></td></tr> <tr><td id="b1"></td><td id="b2"></td><td id="b3"></td> ... <td id="bp"></td></tr> <tr><td id="c1"></td><td id="c2"></td><td id="c3"></td> ... <td id="cp"></td></tr> ・ ・ ・ <tr><td id="s1"></td><td id="s2"></td><td id="s3"></td> ... <td id="sp"></td></tr> </table>
サンプルではドット一つ一つにアニメーションを設定することで、イラストの切り替えを行っています。仮にサンプルの解像度で全てのドットを動かす場合だと、25 × 19 で 475 マスにそれぞれアニメーションを設定することになります。
2. CSS
CSSでドットのサイズを指定します。
.dotcontainer { margin: 50px 0 0 50px; display: flex; justify-content: center; align-items: center; border-collapse: collapse; max-width: 750px; max-height: 570px; } .dotcontainer td { width: 30px; height: 30px; margin: 0; padding: 0; background: #fff; }
1ドットを 30px × 30px として配置しています。
3. JavaScript
ドット一つ一つにアニメーションを設定したので、475マスから同じ動きをするドット134マスを除いて、341種類の動作を記述することになりました。ここでは、その中から4種類のコードを紹介します。
test001
var test001 = anime({targets:'#ad',translateY:[{value:'540px',delay:20000},{value:'540px',delay:35000}], backgroundColor:[{value:'#58360c',duration:0},{value:'#106a9a',delay:20000}], easing:'linear',direction:'alternate',duration:5000,loop:10});
<td>に設定したIDをtargetsで指定して、アニメーションを設定しています。
左上からIDがa1,a2,a3…と順番に並んでいるので、ドット絵に対応するセルの色をbackgroundColorに設定することで、ドット絵を表現することができます。
ドットを上下に移動させたいときは、translateYを使用します。上記コードでは、アニメーション開始から20秒後に下方向に540px(18マス分)移動します。
上方向に移動させたいときは、マイナスで指定します。
ドットの色を変えたいときは、backgroundColorを使用します。上記コードでは、アニメーション開始時の色が「#58360c」で20秒後から「#106a9a」に変化していきます。
test018
var test018 = anime({targets:'#cg',translateX:[{value:'-270px',delay:20000},{value:'-270px',delay:37000}], backgroundColor:[{value:'#fbe07e',duration:0},{value:'#ecac84',delay:20000}], easing:'linear',direction:'alternate',duration:3000,loop:10});
directionに’alternate’を設定しているので、アニメーションは再生と逆再生を繰り返します。
ドットを左右に移動させたいときは、translateXを使用します。上記コードでは、アニメーション開始から20秒後に左方向に270px(9マス分)移動します。
右方向に移動させたいときは、プラスで指定します。
test275
var test275 = anime({targets:'#pm', backgroundColor:[{value:'#FFF',duration:0},{value:'#e49c78',delay:32000}], scale:[{value:2,delay:32000,duration:850,easing:'easeInOutExpo'}, {value:1,duration:850,easing:'easeInOutExpo'},{value:1,delay:26000}], easing:'linear',direction:'alternate',duration:2000,loop:10});
loopに 10 を設定しているので、アニメーションは再生と逆再生を10回繰り返します。
ドットのサイズを変更したいときは、scaleを使用します。上記コードでは、アニメーション開始から32秒後に2倍のサイズに拡大して、0.85秒後に元のサイズに戻ります。
test316
var test316 = anime({targets:'#rm',translateX:[{value:'-480px',delay:10000},{value:'-480px',delay:45000}], backgroundColor:[{value:'#FFF',duration:0},{value:'#6e523d',delay:10000}], rotate:{value:1080,duration:5000,easing:'easeInOutQuad',delay:10000}, easing:'linear',direction:'alternate',duration:5000,loop:10});
durationに 5000 を設定しているので、rotateで回転する時間が5秒となります。
ドットを傾けたり回転させたいときは、rotateを使用します。上記コードでは、アニメーション開始から10秒後に3回転(1080度)します。
X軸を中心に回転させたいときにはrotateX、Y軸を中心に回転させたいときにはrotateYを使用します。
上記コードを組み合わせることでサンプルを作成しました。
ブラウザがChromeだと正常に動作、Edgeだとドットに若干縦揺れが発生します。