コンテンツへスキップ
動かす +JavaScript少し 定番

スクロールで要素を出す

Intersection Observer

画面に入ってきたときだけ、要素をふわっと出す。紹介ページでいちばん見かける動き。

AIへの頼み方

カードが画面に入ったときだけ、ふわっと下から出てくるようにしてください。Intersection Observer で監視して、一度出したら監視をやめる形にしてください。prefers-reduced-motion: reduce の環境では動かさず、最初から表示された状態にしてください。

動くデモ

右下のボタンで再生と停止を切り替えられます。動きを減らす設定の端末では停止した状態で始まります。

全画面で見る ↗

最小コード

HTML
<div class="reveal">画面に入ったら出てくる要素</div>

<style>
  .reveal {
    opacity: 0;
    transform: translateY(18px);
    transition: opacity .55s ease, transform .55s ease;
  }
  .reveal.is-in { opacity: 1; transform: none; }

  /* 動きを減らす設定の人には動かさない */
  @media (prefers-reduced-motion: reduce) {
    .reveal { transition: none; opacity: 1; transform: none; }
  }
</style>

<script>
  const io = new IntersectionObserver((entries) => {
    for (const entry of entries) {
      if (!entry.isIntersecting) continue;
      entry.target.classList.add('is-in');
      io.unobserve(entry.target);   // 一度出したら監視をやめる
    }
  }, { threshold: 0.25 });

  document.querySelectorAll('.reveal').forEach((el) => io.observe(el));
</script>

対応状況

定番 2026年08月時点で確認

Baseline widely available(newly 2019-03-25 / widely 2021-09-25)。この辞典のデモ遅延実行にも使っている。

実案件でそのまま使える。

対応状況は自動更新していません。確認日より後の変化はこのページに反映されていない場合があります。

使いどころ/避けどころ

長いページで、下のほうの内容が「読まれる直前に現れる」ようにしたいときに向く。全体が一度に見えていると単調になりがちな、縦に長い紹介ページや事例一覧で効く。

読み込み時に全部を動かす必要はない。一度出したら監視をやめるのがこの機能の使いどころで、そうすれば上下にスクロールするたびに何度も出たり消えたりしない。

避けたいのは3つ。

ひとつは本文に使うこと。読み進める文章が一段落ずつ遅れて出てくると、読む速度に追いつかない。動かすのは見出し・カード・画像までにとどめる。

ふたつめは動きを大きくしすぎること。下から18ピクセルくらい持ち上げるだけで十分に「出てきた」と伝わる。100ピクセル動かすと、画面が揺れているように感じる人がいる。

みっつめは最初の画面で使うこと。ページを開いた瞬間に見えている範囲が透明から始まると、読み込みが遅れたように見える。最初の一画面は静かに出しておく。

動きを減らす設定をしている人には、透明のまま止まってしまわないよう気をつける。表示だけして動きを消すのが正しい落とし所になる。

関連項目

← 実装辞典の一覧へ