001_fade-in

Intersection Observer で、要素がビューポートに入ったタイミングを検知し、 opacitytransform: translateY() を組み合わせて ふわっと出現させる基本実装です。各要素は一度表示したら監視を解除します。 OS の「視差効果を減らす」設定が有効な場合は、アニメーションを無効化して即時表示します。

スクロールで出現するカード

ビューポートに 15% 入った時点で .is-visible が付与され、 透明+少し下にずれた状態から、本来の位置へフェードインします。

通常通り表示されるカード

遅延なし。3 枚とも同じ上方向のフェードインなので、 data-fade-delay による出現タイミングの差だけを見比べられます。

少し遅れて表示されるカード

data-fade-delay="150" で、表示開始を 150ms 遅らせています。 隣のカードよりわずかに後から出現します。

さらに遅れて表示されるカード

data-fade-delay="300" でさらに遅延。属性に数値を振り分けるだけで、 連続感のある演出にできます(連番遅延を自動で配る応用は別パターンで扱います)。

左からスライドインするカード

data-fade-direction="left" で、左方向からの スライドインに切り替わります。方向は属性だけで指定でき、JS の変更は不要です。

右からスライドインするカード

出現方向を要素ごとに変えても、監視ロジックは共通のままです。 レイアウトやデザインに合わせて方向だけを差し替えられます。

動きなしで純粋にフェードするカード

data-fade-direction="none"transform を使わず、 opacity だけでふわっと現れる純フェードです。位置の移動を伴いません。 一度表示したら監視を解除するため、上下に何度スクロールしても再アニメーションはしません(ワンショット表示)。