🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

スクロールでふわっと表示【IntersectionObserver】

要素が画面に入ったらアニメーションで表示されるしくみ

👀 実行デモ

👇 スクロールして確認してね 👇
🍎 Apple
🍊 Orange
🍌 Banana
🍇 Grape
🍉 Watermelon

💡 このテンプレートの使い道とメリット

このテンプレートは,要素がスクロールによって表示領域に入ったときに「ふわっ」と表示されるアニメーションを実装します。

  • ✅ ユーザーの視線を自然に誘導できる(見逃されにくい)
  • ✅ ページ全体を一度に表示しないことで,読みやすさが向上
  • ✅ IntersectionObserver を使うことで,画像やグラフなどの「遅延読み込み」も可能
  • ✅ 軽量&柔軟にカスタマイズできるため,LPや商品一覧,FAQなどに最適
  • ✅ 「ふわっと出てくる」だけでもページの印象がグッと良くなる

アニメーションのスピードや距離は CSS で簡単に調整できるため,自分好みに変更して楽しむことも可能です。

📋 コピペ用コード


<style>
.box {
  opacity: 0;
  transform: translateY(50px);
  transition: opacity 0.8s ease, transform 0.8s ease;
  margin: 1rem 0;
  font-size: 1.5rem;
}
.box.visible {
  opacity: 1;
  transform: translateY(0);
}
</style>

<div class="box fadein">🍎 Apple</div>
<div class="box fadein">🍊 Orange</div>
<div class="box fadein">🍌 Banana</div>
<div class="box fadein">🍇 Grape</div>
<div class="box fadein">🍉 Watermelon</div>

<script>
const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add("visible");
      observer.unobserve(entry.target); // 一度だけ表示したい場合
    }
  });
});
document.querySelectorAll(".fadein").forEach(el => observer.observe(el));
</script>
      
      
      

🧩 IntersectionObserver の仕組みと実装のコツ

IntersectionObserver は、特定の要素がビューポート内に現れたかどうかを監視できるブラウザAPIです。従来の scroll イベントに比べて軽量かつ高性能で、アニメーションの最適化に役立ちます。

🔍 どんな場面で使える?

スクロールに連動した表示効果だけでなく、画像や動画の遅延読み込み、広告バナーの表示トリガーなど、さまざまな場面で応用されています。

⚙ 実装時の注意点

パフォーマンスを維持するため、表示が完了した要素は unobserve() で監視解除するのがポイントです。また、複数の要素に対して繰り返し使う場合は querySelectorAll() でループ処理を行います。

アニメーションと組み合わせることで、ユーザーの視覚的満足度が大きく向上します。CSSによる transformtransition の調整も忘れずに行いましょう。