アニメーションのライブラリ「anime.js」にはrandom関数が用意されています。
今回はrandom関数を使用して、アニメーションにランダム要素を加えてみます。
anime.randomの使い方
「anime.js」ではanime.random(x,y)と記述することで、xとyの数値間で乱数を生成することができます。例として下のように記述すると、-10~20の間でランダムな値を返します。
anime.random(-10, 20);
anime.randomの使用例
以前の記事で作成したアニメーションにランダムな角度の回転を加えてみます。
anime.jsでイラストを手書き風に表現する
アニメーションのライブラリ「anime.js」を使用して SVG のパスを動かして、イラストの手書き風アニメーションを作成します。
例として下記のように記述します。
HTML
<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="...<省略>..."/> ・ ・ ・ </mask> </defs> <image id="az" xlink:href="Listening.png" mask="url(#clipMask)"></image> </svg>
「HTML」部分は以前の記事とほとんど同じです。
変更箇所は<image>タグのみで、idを追加しています。
CSS
#az { transform-origin: 35% 50%; }
今回はイラストをrotateX、rotateYで回転させるので、transform-originでイラスト(Listening.png)の原点の位置を設定しています。
JavaScript
var animObj_1 = anime({targets:'#a1-1',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:500,delay:0 }); var animObj_2 = anime({targets:'#a1-2',strokeDashoffset: [anime.setDashoffset, 0],easing:'easeInOutSine', autoplay:true,duration:500,delay:500 }); ・ ・ ・ var animObj_1az = anime({targets:'#az',easing:'easeInOutSine', rotateX:[{value:anime.random(-60,60),duration:5000},{value:anime.random(-90,90),duration:5000}, {value:0,duration:5000}], rotateY:[{value:anime.random(-90,90),duration:5000,delay:500},{value:anime.random(-135,135),duration:5000}, {value:anime.random(-180,180),duration:5000}], autoplay:true,opacity:{value:0,delay:11000,duration:5000} }); function doReload(){ window.location.reload(false); } window.addEventListener('load', function(){ setTimeout(doReload,16000); });
rotateXとrotateYの角度にランダム要素を追加しています。上記の場合、rotateXは-60度から60度の間でランダムに回転した後、-90度から90度の間でランダムに回転して、最後に0度に戻ります。
anime.randomで生成された値を更新するために、最後の行でアニメーションの終了時(16秒後)に自動でページを更新するように設定しています。
サンプルアニメーション
サンプルとして上記コードのアニメーションを2周分キャプチャしたものを載せます。
クリックでGIFアニメーションが再生されます