anime.js(8):パスアニメ

●パスに沿ったアニメ

パスに合わせて要素を移動できるライブラリはかなり珍しいと思う。
pathメソッドでパスを作成し、それをanimeオブジェクト内で利用する感じです。

svgのパスに沿ったアニメ
http://jquerystudy.info/anime/2_etc/00_test.html/
var mPath = anime.path('#motionPath path');
var motionPath = anime({
	targets: '#b1',
	translateX: mPath('x'),
	translateY: mPath('y'),
	rotate: path('angle'),
	easing: 'linear',
	duration: 20000,
	loop: true,
});

上記のサンプルではパスと要素が重なっているが、実際はパスの位置に関係なく要素の位置から相対的にパスに沿ってアニメします(つまり位置合わせ大変)。上記のサンプルはcssのposition:absoluteで位置を合わせていますが、その処理を省くと以下のようになります。

 
パスアニメを時間をずらして再生してみました。パスはデータ自体を参照しているため表示しなくても問題ありません。

電車のようなパスアニメ
http://jquerystudy.info/anime/2_etc/01_train.html/

 
objectタグで組み込んだsvgもcontentDocumentを利用すれば操作可能です。

objectタグで組み込んだsvgの利用
http://jquerystudy.info/anime/2_etc/02_object.html/
var svg = document.getElementById('pathSvg').contentDocument;
var mPath = svg.getElementById('mPath');

 
 

●SVGのモーフィング

svgのpolygonデータはモーフィングもできるそうなので試して見ました。マニュアルにはありませんでしたがfillもアニメできました。

ポリゴンをモーフィング
http://jquerystudy.info/anime/2_etc/03_morph.html/
var animeObj = anime({
	targets: '.shape polygon',
	points: '0,0 70,0 138,0 138,50 86,50 0,50',
	fill:'#aaccff',
	direction:'alternate',
	delay:500,
	loop:true
});

少し応用すればメニューなどに使えそうです。

 
 

●SVGのストロークアニメ

vivus.jsのようなストロークアニメも作成できます。ただしsobjectタグで表示されたsvgには対応していません。contentDocumentでパス情報を取得することは可能ですが、操作はできないのです。
 
vivis.jsと異なり、svgのプロパティもアニメできるのでcssに頼らずサンプルのようなアニメを作成することができます。あとストロークアニメではrestartメソッドは機能しないようです。

 
javaScriptは変数名にハイフンを利用できないので、fill-opacityのようなcssプロパティはfillOpacityのようなキャメルケースに置きかえられる仕組みになっています。

function fillFunc(){
	anime({targets:'.guideline',opacity:0,easing:'easeInOutSine',duration:500,delay:1000});
	anime({targets:'#font_line path',fillOpacity:1,easing:'easeInOutSine',duration:500,delay:1000});
	anime({targets:'#font_line path', strokeOpacity:0,easing:'easeInOutSine',duration:500,delay:1000});
}

 
今回はここまで。
次回はkute.jsのような3D的なアニメを作成できるか確認したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


九 − 3 =


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>