No.108
SCROLL JSGSAP

GSAP Horizontal Scroll

縦スクロールに連動してパネルが横に流れるGSAPの横スクロールセクション。pin + scrub + xPercentの3点セットで実装するポートフォリオ定番。

DEMO

▼ この枠内を縦にスクロールするとパネルが横に流れます ▼
01HORIZONTAL
02SCROLL
03POWERED BY
04GSAP
HORIZONTAL RANGE END

CODE

HTML
<div class="demo-stage ghs-scroller">
  <div class="ghs-intro">▼ この枠内を縦にスクロールするとパネルが横に流れます ▼</div>
  <section class="ghs-pin">
    <div class="ghs-track">
      <div class="ghs-panel"><span>01</span>HORIZONTAL</div>
      <div class="ghs-panel"><span>02</span>SCROLL</div>
      <div class="ghs-panel"><span>03</span>POWERED BY</div>
      <div class="ghs-panel"><span>04</span>GSAP</div>
    </div>
  </section>
  <div class="ghs-outro">HORIZONTAL RANGE END</div>
</div>
CSS
.ghs-scroller { height:320px; overflow-y:auto; background:#0F0F12; border-radius:8px; }
.ghs-intro { height:110px; display:flex; align-items:center; justify-content:center; color:rgba(255,255,255,.4); font-family:'Oswald',sans-serif; letter-spacing:.12em; font-size:.75rem; padding:0 1.5rem; text-align:center; }
.ghs-pin { height:320px; overflow:hidden; display:flex; align-items:center; }
.ghs-track { display:flex; width:400%; height:75%; }
.ghs-panel {
  width:25%; height:100%; flex:none;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:.5rem;
  color:#fff; font-family:'Oswald',sans-serif; letter-spacing:.18em; font-size:1rem;
  border-right:1px solid rgba(255,255,255,.08); background:#15151A;
}
.ghs-panel:nth-child(even) { background:#1A1A20; }
.ghs-panel span { color:#E91B89; font-size:1.6rem; }
.ghs-outro { height:160px; 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; }
JS
// 要 GSAP + ScrollTrigger CDN(gsap.min.js / ScrollTrigger.min.js)
// デモは枠内スクロールのため scroller を指定。ページ全体で使う場合は scroller 不要
gsap.registerPlugin(ScrollTrigger);
gsap.to('.ghs-track', {
  xPercent: -75, // パネル4枚 = (4-1)/4 * 100
  ease: 'none',
  scrollTrigger: {
    trigger: '.ghs-pin',
    scroller: '.ghs-scroller',
    start: 'top top',
    end: '+=420',
    scrub: true,
    pin: true
  }
});

AI PROMPT

Claude Code Cursor v0
PROMPT
縦スクロールに連動してパネルが横に流れる横スクロールセクションをGSAPで作って。横並びのパネルを width: パネル数×100% のトラック(display:flex)に入れ、外側セクションは overflow:hidden。gsap.to(track, { xPercent: -(パネル数-1)/パネル数*100, ease: 'none', scrollTrigger: { trigger: セクション, start: 'top top', end: '+=1200', scrub: true, pin: true } }) で、セクションをpinしたまま縦スクロール量をxPercentに変換する。ease:'none'必須(スクロールと1:1対応させるため)。GSAP CDN(gsap.min.js + ScrollTrigger.min.js)の読み込みが必要。作品ギャラリー・工程紹介に。

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
→ HORIZONTAL SCROLL → GSAP PIN SECTION → GSAP PARALLAX SCROLL

GSAP Horizontal Scroll(横スクロールセクション)とは

ユーザーの縦スクロールに連動して、画面内のパネル群が横方向へ流れていくセクション。GSAP ScrollTrigger の pin(セクション固定)+ scrub(スクロール連動)+ xPercent(トラックの横移動)の3点セットで実装します。ease: 'none' にしてスクロール量と移動量を1:1で対応させるのがコツです。

CSS Scroll Snap による横スクロール(当サイトの Horizontal Scroll)が「横方向の操作」を必要とするのに対し、GSAP版は縦スクロールのまま横のコンテンツを見せられるため、ポートフォリオの作品一覧や制作工程の紹介など「順番に見せたい横長コンテンツ」に向いています。