ScrollTriggerは、その名の通りスクロールに応じてイベントをトリガーしてくれるJavaScriptのライブラリです。
記念は、アニメーション制作のJavaScriptの定番ライブラリ「GSAP」がありますが、容量が「65KB程度です、一方、ScrollTriggerは「13KB程度」と容量も小さく、簡単に実装もできるので好きなライブラリです。
GSAPほどゴリゴリのアニメーションはいらない人には、こっちのScrollTriggerはいい感じです。
そんなScrollTriggerについてご紹介していきますので、ぜひ最後までご覧いただけたら嬉しいです。
目次
ScrollTriggerとは?
ScrollTrigger、は名前の通りスクロールに応じてイベントをトリガーしてくれるネイティブなJavaScriptのライブラリです。
ScrollTriggerは約2年くらい前のライブラリで、定番アニメーションライブラリ「GSAP」とは異なり、比較的寛容なMITライセンスであるところは嬉しいところです。
商用利用や再配布等々、自由に無料でつかうことができます。
外部リンク ScrollTrigger
ScrollTriggerで実装できるスクロールトリガーのサンプル
早速「ScrollTrigger」を使ったサンプルです。
この記事でこれらができるコードもあわせて紹介していますが、まずはできることのイメージとしてこれらをご覧ください。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
ちなみにこの記事の h2
タグにも「ScrollTrigger」でフェードインさせるようにしてるので、合わせてご覧ください。
実装の手順と方法
実装の手順と方法は、全部で4つのSTEPになっています。順に解説していきます。
まずは、ScrollTriggerの読み込みの設定を行いましょう。
ScrollTriggerは、CDNで配信されているので以下のコードを<head>〜</head>
に記述します。
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollTrigger/1.0.3/ScrollTrigger.min.js"></script>
次に、ScrollTriggerを適用させたいHTMLのタグの中に、data-trigger
を記述させます。
例えば、p
タグに適用させたい場合は以下の通りです。
<p data-trigger="" class="fadeInLeft">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
この記事のように、例えば一律で本文内の h2
タグに data-trigger
を全て付けたい場合、一個一個つけるのはなかなか大変です。
その場合いろんな方法がありますが、ネイティブなJavaScriptを使って一気に付与することもできます。
以下は、当サイトでも利用しているWordPressテーマ「SANGO」の場合のコードです。
const postH = document.querySelectorAll('.entry-content h2');
for (i = 0; i < postH.length; i++) {
postH[i].setAttribute("data-trigger","");
postH[i].setAttribute("class","fadeInLeft");
}
console.log(postH)
HTMLで data-trigger
属性を付与した要素は、スクロールに応じて「visible」「invisible」のclass名が付与されます。
このように、CSSのスタイルを当てることで様々なアニメーションが実装出来るので、好みのCSSを記述しましょう。
最後に、ScrollTrigger
を使う為のコードを記述します。オプション等は使わずに単に使う場合は、以下の一文でOKです。
const trigger = new ScrollTrigger.default()
trigger.add('[data-trigger]')
上記のコードを <body>〜</body>
のクロージングタグ直前にコピペすればOKです。
要素を追加した場合でも、この一文だけでOKです。
利用可能なオプション
開発者が公開中のGitHubでも方法が色々紹介されていますが、一度だけトリガーさせる「once」の設定方法や、付与するclassの設定もオプションで可能です。
trigger.add('[data-trigger]', {
// 一回のみ
once: true,
//class名の変更
toggle: {
class: {
in: 'animateIn',
out: 'animateOut'
}
},
})
外部リンク ScrollTriggerのGitHub
色々できるので、気になる方はGitHubも見てみましょう。
スクロールトリガーのサンプルとコード5選
ここでは、「ScrollTrigger」とCSSのアニメーションを掛け合わせ5種類のサンプルを作ってみました。ご覧ください。
透明から徐々に表示
まずは、シンプルに透明の要素がスクロールして到達すると徐々に表示されるスニペットです。
表示させたいHTMLの要素に「data-trigger」を付け、class名は opacityFadeIn
でこの表示ができます。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
コードを表示する
<p data-trigger class="opacityFadeIn">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
/* 透明から表示 */
.opacityFadeIn.visible {
animation: opacityFadeIn 0.7s ease 0s 1 normal;
}
@keyframes opacityFadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
フェードインしながら左から右に背景色が伸びる
スクロールして到達すると、フェードインしながら左から右にオーバーレイ(覆い隠す)で黒い背景色が表示されます。
表示させたい要素に「data-trigger」を付け、class名は curtainLefttoRight
です。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
コードを表示する
<p data-trigger class="curtain">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
/* 左から右にカーテン */
.curtainLefttoRight {
position:relative;
}
.curtainLefttoRight.visible {
animation-name: curtainLeftFadeIn;
animation-duration: 1.2s;
animation-timing-function: ease-in-out;
}
.curtainLefttoRight.visible:before {
display: block;
content: "";
position: absolute;
z-index: 999;
width: 100%;
height: 100%;
top: 0;
left: 0;
transform: scaleX(0);
background-color: #333;
animation-name: curtainLeft;
animation-duration: 1.2s;
animation-timing-function: ease-in-out;
animation-fill-mode: forwards;
}
@keyframes curtainLeftFadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes curtainLeft{
0% {
transform-origin:left;
transform:scaleX(0);
}
50% {
transform-origin:left;
transform:scaleX(1);
}
50.001% {
transform-origin:right;
}
100% {
transform-origin:right;
transform:scaleX(0);
}
}
フェードインしながら右から左に背景色が伸びる
今度は、フェードインしながら右から左にオーバーレイ(覆い隠す)で黒い背景色が表示されます。
表示させたい要素に「data-trigger」を付け、class名は curtainRighttoLeft
です。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
コードを表示する
<p data-trigger="" class="curtainRighttoLeft">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
/* 右から左にカーテン */
.curtainRighttoLeft {
position:relative;
}
.curtainRighttoLeft.visible {
animation-name: curtainLeftFadeIn;
animation-duration: 1.2s;
animation-timing-function: ease-in-out;
}
.curtainRighttoLeft.visible:before {
display: block;
content: "";
position:absolute;
z-index: 999;
width: 100%;
height: 100%;
top: 0;
left: 0;
transform: scaleX(0);
background-color: #333;
animation-name:curtainRight;
animation-duration:1.2s;
animation-timing-function:ease-in-out;
animation-fill-mode:forwards;
}
@keyframes curtainRightFadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes curtainRight{
0% {
transform-origin:right;
transform:scaleX(0);
}
50% {
transform-origin:right;
transform:scaleX(1);
}
50.001% {
transform-origin:left;
}
100% {
transform-origin:left;
transform:scaleX(0);
}
}
左から右にふわっとフェードイン
スクロールして到達すると、左から右にフェードインしながら表示されます。
表示させたい要素に「data-trigger」を付け、class名は fadeInLeft
です。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
コードを表示する
<p data-trigger="" class="fadeInLeft">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
/* 左から右にふわっとフェードイン */
.fadeInLeft.visible {
animation: fadeInLeft 0.7s ease 0s 1 normal;
}
/* fadeInLeft */
@keyframes fadeInLeft {
0% {
opacity: 0;
transform: translateX(-30px);
}
100% {
opacity: 1;
}
}
下から上にふわっとフェードイン
スクロールして到達すると、下から上にふわっとフェードインしながら表示されます。
この場合は、表示させたい要素に「data-trigger」を付け、class名は fadeInBottom
です。
ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト
コードを表示する
<p data-trigger="" class="fadeInBottom">ダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキストダミーテキスト</p>
/* 下から上にフェードイン */
.fadeInBottom.visible {
animation: fadeInBottom 0.7s ease 0s 1 normal;
}
/* fadeInBottom */
@keyframes fadeInBottom {
0% {
opacity: 0;
transform: translateY(30px);
}
100% {
opacity: 1;
}
}
さいごに
ScrollTriggerは、スクロールトリガー。そして、アニメーションはCSSでスタイルを簡単に当てることができ、非常に使いやすく、カスタマイズもしやすいライブラリです。
jQuery不要なのも嬉しいところです。
この記事では、数パターンのアニメーションをサンプルとして5個記載しましたが、これ以外にもCSSのアニメーションにはいろんなものがあるので、以下の記事も参考にしてアニメーションを作ってみてください。
CSSのanimationプロパティでできるアニメーション20選