これなら実装がすごく簡単!スクロール時にDOM要素をアニメーションで表示する超軽量のJavaScript -Animon
Post on:2021年6月9日
Webページがロードされた時やスクロールされた時など、ブラウザのビューポートに表示された時に指定したDOM要素にさまざまなアニメーションを個別に設定できる超軽量のJavaScriptライブラリを紹介します。
HTMLにclassとdata属性を加えるだけで、ランディングページでよく見かけるスクロールすると見出しやテキストや画像が右・左からアニメーションでふわりと表示されたり、フェードインやスケールアップ・ダウンなどが簡単に実装できます。
Animonの特徴
Animonは、Webページ上のDOM要素がビューポートに表示された時に、指定したDOM要素をアニメーション化させるJavaScriptの超軽量(0.9kB)ライブラリです。単独で動作し、他のスクリプトへの依存はありません。
実装は簡単で、JavaScriptとCSSを外部ファイルとして記述し、あとはHTMLにclassを加えるだけです。アニメーションの持続時間や遅延時間も設定でき、HTMLにdata属性で指定するだけです。
アニメーションの種類
Animonで現在利用できるエフェクトは、下記の通りです。
- fadeIn
- fadeInLeft (default)
- fadeInRight
- fadeInDown
- fadeInUp
- scaleUp
- scaleDown
各エフェクトは持続時間や開始時間を簡単に設定でき、複数のエフェクトを同時に使用することもできます。例えば、見出しは上からフェードインさせて、コンテンツは下からフェードインさせるというのも簡単です。
また、以下の機能にも対応予定です。
- エフェクトを増やす
- レガシーブラウザのサポート
- letter by letterエフェクト
- 1回だけアニメーション化するオプション
Animonのデモ
Animonのデモでは、コンテンツがビューポートに表示されるとさまざまなアニメーションで表示されます。まずは、右からフェードイン。
続いて、左からスケールアップ。
コンテンツがぎゅっとなるスケールダウン。
フェードインとスケールダウンのミックス。
上からフェードインと右からフェードインのミックス。
Animonの使い方
Step 1: 外部ファイル
当スクリプトとスタイルシートを外部ファイルとして記述します。
1 2 |
<link rel="stylesheet" href="https://unpkg.com/animon@1.0.1/dist/animon.css"/> <script src="https://unpkg.com/animon@1.0.1/dist/animon.iife.js"></script> |
animon.iife.jsとanimon.cssはどちらもCDN経由で利用できます。
Step 2: JavaScript
スクリプトを初期化し、実行します。
1 2 3 |
<script type="text/javascript"> Animon.animon(); </script> |
Step 3: HTML
アニメーションを適用する要素に.animonItemを加えます。
1 |
<h1 class="animonItem">アニメーションを適用する要素<h1> |
アニメーションのタイミング(遅延時間)や持続時間もHTMLで設定できます。
1 2 3 |
<h1 class="animonItem" data-delay="400">400ミリ秒遅延<h1> <h1 class="animonItem" data-duration="4s">4秒持続<h1> |
オプション
デフォルトアニメーションだけでなく、独自のアニメーションを適用することもできます。新しいクラス(例: .is-visible)を作成して定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* Base */ .animonItem { opacity: 0; will-change: opacity, transform; transition: opacity 640ms 400ms cubic-bezier(0.5, 1, 0.89, 1), transform 640ms 400ms cubic-bezier(0.5, 1, 0.89, 1); } .animonItem.is-visible { opacity: 1; } /* Custom effect */ .animonItem[data-effect="myEffect"] { transform: translateY(20rem); } .animonItem[data-effect="myEffect"].is-visible { transform: translateY(0); } |
sponsors