pagetop

BLOG

ScrollMagic.jsでスクロールアニメーションをつくる

  • HOME

  • BLOG

  • ScrollMagic.jsでスクロールアニメーションをつくる

Article

ScrollMagic.jsでスクロールアニメーションをつくる

javascript

ScrollMagic.jsを使って、比較的簡単にスクロースアニメーションを実装するためのメモです。
正直、スクロールに応じたギミックはあまり得意ではないのですが、ちょっと調べてみると割と簡単じゃん!てことでScrollMagic.jsでデモ作成しました。
luxy.jsも秀逸でしたが、ScrollMagic.jsも用途に応じて色々楽しめそうです。

 

プラグインをダウンロードして設置する

なにはともあれプラグインをダウンロードしましょう。
GitHubからお願いします。

 

では、設置してみます。

 

今回は「stopExecutionOnTimeout.js」と「ScrollMagic.js」を使用します。
</body>の上に記述しましょう。

<script src="js/stopExecutionOnTimeout.js"></script>
<script src="js/ScrollMagic.js"></script>

 

アニメーションイメージを準備する

今回は歩いてるビジネスマンをスクロールアニメで動かします。

スクロールアニメ

作成したら、背景透過のpngデータで書き出しましょう。

 

CSSを記述する

では、CSSを記述します。
今回は「viewer」というクラスを用意してアニメーションイメージをbackgroundに設定します。また、1人物を1フレームのアニメーションとするためにフレーム数だけのクラス(frame1〜)を用意し、それぞれにbackground-positionで等間隔にずらしながら設定します。

.viewer{
height: 100vh;
margin-left: auto;
margin-right: auto;
max-width: 280px;
width: 100%;
background-repeat: no-repeat;
background-position: 0 50%;
background-image: url(images/doodle-sprite1.png);
}
.viewer.frame1 {
background-position: -280px 50%;
}
.viewer.frame2 {
background-position: -560px 50%;
}
.viewer.frame3 {
background-position: -840px 50%;
}
.viewer.frame4 {
background-position: -1120px 50%;
}
.viewer.frame5 {
background-position: -1400px 50%;
}
.viewer.frame6 {
background-position: -1680px 50%;
}
.viewer.frame7 {
background-position: -1960px 50%;
}
.viewer.frame8 {
background-position: -2240px 50%;
}
.viewer.frame9 {
background-position: -2520px 50%;
}
.viewer.frame10 {
background-position: -2800px 50%;
}
.viewer.frame11 {
background-position: -3080px 50%;
}
.viewer.frame12 {
background-position: -3360px 50%;
}
.viewer.frame13 {
background-position: -3640px 50%;
}
.viewer.frame14 {
background-position: -3920px 50%;
}
.viewer.frame15 {
background-position: -4200px 50%;
}
.viewer.frame16 {
background-position: -4480px 50%;
}
.viewer.frame17 {
background-position: -4760px 50%;
}

 

HTMLを記述する

次にHTMLを記述します。

<section class="scene" id="sticky">
<div class="viewer"></div>
</section>

ScrollMagic.jsのギミックには#stickyと.viewerを使用します。

 

JSを記述する

先述プラグインの直下にJSを記述します。

<script src="js/stopExecutionOnTimeout.js"></script>
<script src="js/ScrollMagic.js"></script>
<script>
var viewer = document.querySelector('.viewer'),
frame_count = 16,
offset_value = 200;

var controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 0,
reverse: true } });

new ScrollMagic.Scene({
triggerElement: '#sticky',
duration: frame_count * offset_value + 'px',
reverse: true }).

setPin('#sticky').
addIndicators().
addTo(controller);

for (var i = 1, l = frame_count; i <= l; i++) {if (window.CP.shouldStopExecution(0)) break;
new ScrollMagic.Scene({
triggerElement: '#sticky',
offset: i * offset_value }).

setClassToggle(viewer, 'frame' + i).
addIndicators().
addTo(controller);
};
</script>

 

フレーム数とスクロール速度

viewerクラスのアニメーションのフレーム数とスクロール速度を設定します。

var viewer = document.querySelector('.viewer'),
frame_count = 16,//フレーム数
offset_value = 200;//スクロール速度(数字が大きくなれば遅くなります。)

特定の位値で要素を止める

特定の位値で要素を止めます。止めておきたい要素でシーンを作り、setPinを呼びます。

new ScrollMagic.Scene({
triggerElement: '#sticky',
duration: frame_count * offset_value + 'px',
reverse: true }).

setPin('#sticky').
addIndicators().
addTo(controller);

スクロールの位置に応じてフレームをアニメーションにする

スクロールに合わせてviewerクラスのアニメーションを動かします。

for (var i = 1, l = frame_count; i <= l; i++) {if (window.CP.shouldStopExecution(0)) break;
new ScrollMagic.Scene({
triggerElement: '#sticky',
offset: i * offset_value }).

setClassToggle(viewer, 'frame' + i).
addIndicators().
addTo(controller);
};

以上です。

デモ用意しました。

デモ

 

ScrollMagic.jsは、その他にもパララックス対応だったりモバイル対応だったり、色々サンプルが公式のデモサイトに紹介されています。
是非ご利用ください。

公式デモサイト

Spread the love