jsを使ったアニメーション-anime.jsについて
- 2018.11.27
- JavaScript
- anime.js, JavaScript, プラグイン

jsを使ったアニメーションをanime.jsで実装する方法について書きます。
今回は、スクロールして画面上にアニメーションしたい要素が出現したときにイベントが発生するようにするため、jquery.inviewを利用します。
セッティング
各種ライブラリは以下から落としてきます。
– anime.js
– jquery.inview
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.j"></script>
<script type="text/javascript" src="./js/jquery.inview.min.j"></script>
<script type="text/javascript" src="./js/anime.min.j"></script>
jquery.inviewは、なぜかjquery2系・3系では使えないようなので注意
HTMLの記述
ライブラリ上で特にclassやdata属性の指定をしないといけないというルールはないので、適当で大丈夫です。
複数要素を動かすときにそれぞれの要素にidを振ってあげると楽なので、そこだけセットしておきます。
<div class="container">
<p id="item01" class="item"><img src="./images/items/01.png"></p>
<p id="item02" class="item"><img src="./images/items/02.png"></p>
</div>
CSSの記述
先に要素をcss上でposition:absolute指定でそれぞれ配置したうえで、動かすようにします。
/*css*/
.contaier {
position: relative;
width: 500px;
margin: 0 auto;
}
.item {
position: absolute;
/*inviewのイベント発生が遅いので、初期で見えてしまう問題があるので初期状態は消しておく*/
display:none;
}
#item01 {
top: 100px;
left: 150px
}
#item02 {
bottom: 200px;
right: 50px
}
JSの設定
まずはinviewの設定
以下の記述でinview側はセットできます。
$('.container').one('inview', function(event, visible) {
// .oneで一度だけイベントを発生させる(スクロールで戻ったあと2度目は発生させないため)
if (visible) {
// 要素が見えたときにイベントを発生
// ここにアニメーションを記載。
}
});
次にアニメーションの設定
以下の記述でanimeの設定をします。
詳細な設定はこちらの公式DOCUMENTより参照
complete以下を設定してあげることで、移動後(非同期処理)の挙動も設定できます。
$('.container').one('inview', function(event, visible) {
if (visible) {
// 初期のdisplayが非表示なので、fadeInで見せる。
// 注意したいのは、これはreverseで表現できないため、jqueryのfadeInを利用する。
$('#item01').fadeIn(1000);
anime({
targets: '#item01',
translateY: 200,
easing: 'easeInOutQuart',
direction: 'reverse', // reverseを設定することでCSSで配置したゴール位置ところへ移動させます。
rotate: -10,
duration: 2000,
scale: '*=0.6',
complete: function() { //ここから先で移動後の挙動
anime({
targets: '#item01',
duration: 500,
loop: true,
direction: 'alternate',
rotate: 2,
easing: 'easeInOutSine',
loop: true
});
}
});
}
});
こんな感じで設定できます。
direction:reverseを設定することで、CSSであらかじめ設定した場所へ移動します。
他にもon(“click”)などのイベントを設定すればclickで移動させたりすることができます。
durationで動きの時間制御と、fadeIn()で表示の速度を制御しています。
まとめ
- inviewと初期表示とfadeInで苦戦しました。
- jquery.inviewのチョイスは正直微妙かも。
- メンテナンスもされていない(4年前とか)ようなので、何かスクロールで要素が出現したときにイベントを発生させるライブラリがあれば教えてください。
- アニメーションについては、CSSのみで実装できるものも多いが、複雑な動きを表現したいときのanime.jsのチョイスは良さそう
- 細かく設定していい感じに動くと楽しくなって、ついつい時間をかけすぎてしまうので注意(笑)
ポートフォリオ・お問合せはこちら
-
前の記事
文字コードがShift_JISの時の簡易開発環境(VSCode) 2018.11.26
-
次の記事
三点リーダーについて-CSSやJSを使った実装方法 2018.12.03
コメントを書く