No.107
SCROLL JSGSAP

GSAP Pin Section

スクロール中にセクションを画面に固定(ピン留め)し、その間に進捗バーが満ちるGSAP ScrollTriggerのpin。ストーリーテリングLPの土台になる定番。

DEMO

▼ この枠内をスクロール ▼

PINNED SECTION

スクロールしてもこのセクションは固定されたまま、下のバーだけが進みます。

PINNED RANGE END — ここから通常スクロールに戻ります

CODE

HTML
<div class="demo-stage gps-scroller">
  <div class="gps-intro">▼ この枠内をスクロール ▼</div>
  <section class="gps-pin">
    <p class="gps-label">PINNED SECTION</p>
    <p class="gps-text">スクロールしてもこのセクションは固定されたまま、下のバーだけが進みます。</p>
    <div class="gps-track"><div class="gps-bar"></div></div>
  </section>
  <div class="gps-outro">PINNED RANGE END — ここから通常スクロールに戻ります</div>
</div>
CSS
.gps-scroller { height:320px; overflow-y:auto; background:#0F0F12; border-radius:8px; }
.gps-intro { height:120px; display:flex; align-items:center; justify-content:center; color:rgba(255,255,255,.4); font-family:'Oswald',sans-serif; letter-spacing:.15em; font-size:.8rem; }
.gps-pin {
  height:320px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1rem;
  padding:2rem; background:#15151A; border-top:1px solid rgba(255,255,255,.08); border-bottom:1px solid rgba(255,255,255,.08);
}
.gps-label { font-family:'Oswald',sans-serif; font-size:1.3rem; letter-spacing:.2em; color:#fff; margin:0; }
.gps-text { color:#a9a9b2; font-size:.8rem; line-height:1.7; margin:0; text-align:center; max-width:340px; }
.gps-track { width:min(320px,80%); height:6px; border-radius:999px; background:rgba(255,255,255,.12); overflow:hidden; }
.gps-bar { width:0%; height:100%; border-radius:999px; background:linear-gradient(90deg,#E91B89,#7B37A8); }
.gps-outro { height:200px; display:flex; align-items:center; justify-content:center; color:rgba(255,255,255,.35); font-family:'Oswald',sans-serif; letter-spacing:.12em; font-size:.72rem; padding:0 1.5rem; text-align:center; }
JS
// 要 GSAP + ScrollTrigger CDN(gsap.min.js / ScrollTrigger.min.js)
// デモは枠内スクロールのため scroller を指定。ページ全体で使う場合は scroller 不要
gsap.registerPlugin(ScrollTrigger);
ScrollTrigger.create({
  trigger: '.gps-pin',
  scroller: '.gps-scroller',
  start: 'top top',
  end: '+=260',
  pin: true
});
gsap.to('.gps-bar', {
  width: '100%', ease: 'none',
  scrollTrigger: {
    trigger: '.gps-pin',
    scroller: '.gps-scroller',
    start: 'top top',
    end: '+=260',
    scrub: true
  }
});

AI PROMPT

Claude Code Cursor v0
PROMPT
スクロール中にセクションを画面に固定(ピン留め)し、固定中の進捗に合わせて中身が変化するGSAP ScrollTriggerのpinを作って。gsap.registerPlugin(ScrollTrigger) 後、ScrollTrigger.create({ trigger: '.section', start: 'top top', end: '+=600', pin: true }) でセクションを固定。固定中の演出は gsap.to(要素, { ..., scrollTrigger: { trigger: '.section', start: 'top top', end: '+=600', scrub: true } }) で進捗連動(scrub)にする。pinはトリガー要素の下に pin-spacer を自動挿入してレイアウトを保つ。GSAP CDN(gsap.min.js + ScrollTrigger.min.js)の読み込みが必要。製品紹介・ストーリーテリングLPの土台に。

Acceptance criteria: works with prefers-reduced-motion (animation disabled), zero console errors, zero layout shift

AIエージェントでの実装ガイド → Claude Code でWebアニメーションを実装する

BOOKS · PR · AMAZON

📖 なかしまぁ先生のCSSアニメーション入門 📖 UIデザインの心理学 ―わかりやすさ・使いやすさの法則 📖 Fundamentals of Web Animation with GSAP

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

学びを止めない · AMAZONサブスク

📚 Kindle Unlimited — 技術書・デザイン書が読み放題。30日無料体験 → 🎧 Audible — 移動中に耳で学ぶオーディオブック。30日無料体験 → 📦 Amazon Prime — Prime Reading・配送特典つき。30日無料体験 → 🎵 Music Unlimited — 作業用BGMに。1億曲が聴き放題・30日無料体験 →

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

RELATED EFFECTS

↗ MORE
→ STICKY SECTIONS → GSAP SCROLL REVEAL → GSAP HORIZONTAL SCROLL

GSAP Pin Section(ピン留めセクション)とは

スクロールの途中で特定のセクションを画面に固定(ピン留め)し、ユーザーがスクロールした量に応じて固定中の演出を進めるテクニック。GSAP ScrollTrigger の pin: true と scrub の組み合わせで実装します。固定距離は end: '+=600' のようにスクロール量で指定できるため、演出の「尺」を自在に設計できます。

CSSの position: sticky と似ていますが、pinは固定中の進捗を0〜1の値として扱えるため、進捗バー・画像の切り替え・テキストの入れ替えなどを正確に同期できるのが強みです。製品のこだわり紹介や機能ツアーなど、読み進めるほど場面が展開するLPで定番の構成です。