
gsap-framer-scroll-animation
熱門當使用者想要建立滾動動畫、滾動效果、視差效果、滾動觸發的顯示、固定區塊、水平滾動、文字動畫,或任何與滾動位置相關的動畫時,請使用此技能。涵蓋 GSAP ScrollTrigger(固定、跟隨滾動、吸附、時間軸、水平滾動、ScrollSmoother、matchMedia)和 Framer Motion / Motion v12(useScroll、useTransform、useSpring、whileInView、variants)。即使使用者只說「在滾動時動畫」、「滾動時淡入」、「做成像 Apple 那樣的滾動效果」、「視差效果」、「黏性區塊」、「滾動進度條」或「進場動畫」,也請使用此技能。同時觸發 Copilot 提示模式以產生 GSAP 或 Framer Motion 程式碼。與 premium-frontend-ui 技能搭配使用,以獲得創意理念和設計層面的精緻度。
Use this skill whenever the user wants to build scroll animations, scroll effects, parallax, scroll-triggered reveals, pinned sections, horizontal scroll, text animations, or any motion tied to scroll position — in vanilla JS, React, or Next.js. Covers GSAP ScrollTrigger (pinning, scrubbing, snapping, timelines, horizontal scroll, ScrollSmoother, matchMedia) and Framer Motion / Motion v12 (useScroll, useTransform, useSpring, whileInView, variants). Use this skill even if the user just says "animate on scroll", "fade in as I scroll", "make it scroll like Apple", "parallax effect", "sticky section", "scroll progress bar", or "entrance animation". Also triggers for Copilot prompt patterns for GSAP or Framer Motion code generation. Pairs with the premium-frontend-ui skill for creative philosophy and design-level polish.
GSAP & Framer Motion — 滾動動畫技能
搭配 GitHub Copilot 提示的生產級滾動動畫,包含可直接使用的程式碼範例與深入的 API 參考。
設計夥伴: 此技能提供滾動驅動動畫的技術實作。
至於創意理念、設計原則以及應如何與何時進行動畫的高階美學,請務必交叉參考 premium-frontend-ui 技能。
兩者結合形成完整方法:premium-frontend-ui 決定做什麼與為什麼做;
此技能則提供如何做。
快速函式庫選擇器
| 需求 | 使用 |
|---|---|
| Vanilla JS、Webflow、Vue | GSAP |
| 固定、水平滾動、複雜時間軸 | GSAP |
| React / Next.js、宣告式風格 | Framer Motion |
| whileInView 進場動畫 | Framer Motion |
| 在同一個 Next.js 應用程式中同時使用兩者 | 請參閱參考檔案中的說明 |
閱讀相關參考檔案以取得完整範例與 Copilot 提示:
- GSAP →
references/gsap.md— ScrollTrigger API、所有範例、React 整合 - Framer Motion →
references/framer.md— useScroll、useTransform、所有範例
設定(務必優先執行)
GSAP
npm install gsap
import gsap from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger); // 必須在任何 ScrollTrigger 使用前呼叫
Framer Motion(Motion v12,2025)
npm install motion # 2025 年中後的新套件名稱
# 或:npm install framer-motion — 仍可使用,API 相同
import { motion, useScroll, useTransform, useSpring } from 'motion/react';
// 舊版:import { motion } from 'framer-motion' — 同樣有效
工作流程
- 解讀使用者的意圖,判斷最適合使用 GSAP 還是 Framer Motion。
- 閱讀
references/中的相關參考文件,以取得詳細 API 與模式。 - 若尚未安裝所需套件,建議進行安裝。
- 根據要求的格式(React 元件、hook 需求或 vanilla JS)實作動畫結構的骨架。
- 使用正確的工具(滾動 vs 視區內元素),確保提供無障礙選項,且 hook 不會導致無限重新渲染。
5 種最常見的滾動模式
快速參考 — 完整範例與 Copilot 提示請見參考檔案。
1. 進入時淡入(GSAP)
gsap.from('.card', {
opacity: 0, y: 50, stagger: 0.15, duration: 0.8,
scrollTrigger: { trigger: '.card', start: 'top 85%' }
});
2. 進入時淡入(Framer Motion)
<motion.div
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: '-80px' }}
transition={{ duration: 0.6 }}
/>
3. 跟隨滾動 / 滾動連結(GSAP)
gsap.to('.hero-img', {
scale: 1.3, opacity: 0, ease: 'none',
scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true }
});
4. 滾動連結(Framer Motion)
const { scrollYProgress } = useScroll({ target: ref, offset: ['start end', 'end start'] });
const y = useTransform(scrollYProgress, [0, 1], [0, -100]);
return <motion.div style={{ y }} />;
5. 固定時間軸(GSAP)
const tl = gsap.timeline({
scrollTrigger: { trigger: '.section', pin: true, scrub: 1, start: 'top top', end: '+=200%' }
});
tl.from('.title', { opacity: 0, y: 60 }).from('.img', { scale: 0.85 });
關鍵規則(務必遵守)
- GSAP:使用前務必呼叫
gsap.registerPlugin(ScrollTrigger) - GSAP scrub:務必使用
ease: 'none'— 啟用 scrub 時使用其他 easing 會感覺不對 - GSAP React:使用
@gsap/react的useGSAP,不要使用單純的useEffect— 它會自動清理 ScrollTrigger - GSAP 除錯:開發時加入
markers: true;上線前移除 - Framer:
useTransform的輸出必須放入motion.*元素的style屬性,而非一般 div - Framer Next.js:在使用 motion hook 的檔案頂端務必加上
'use client' - 兩者通用:只對
transform和opacity進行動畫 — 避免使用width、height、box-shadow - 無障礙:務必檢查
prefers-reduced-motion— 請參閱各參考檔案中的模式 - 高階精緻度:遵循 premium-frontend-ui 技能原則,關於動畫時機、緩動曲線與節制 — 動畫應強化體驗,而非造成負擔
Copilot 提示技巧
- 事先提供完整的選擇器、基礎圖片與滾動範圍 — 模糊的提示會產生模糊的程式碼
- 對於 GSAP,務必指定:選擇器、start/end 字串、是否要 scrub 或 toggleActions
- 對於 Framer,務必指定:使用哪個 hook(useScroll 或 whileInView)、偏移值、要轉換的屬性
- 使用
/fix時貼上確切的錯誤訊息 — Copilot 在有真實錯誤時修正效果會好很多 - 在 Copilot Chat 中使用
@workspace範圍,讓它讀取你現有的元件結構
參考檔案
| 檔案 | 內容 |
|---|---|
references/gsap.md |
完整的 ScrollTrigger API 參考、10 個範例、React(useGSAP)、Lenis、matchMedia、無障礙 |
references/framer.md |
完整的 useScroll / useTransform API、8 個範例、variants、Motion v12 說明、Next.js 技巧 |
相關技能
| 技能 | 關係 |
|---|---|
| premium-frontend-ui | 創意理念、設計原則與美學指南 — 定義何時與為何進行動畫 |





