Awesome-copilot gsap-framer-scroll-animation
install
source · Clone the upstream repo
git clone https://github.com/github/awesome-copilot
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/github/awesome-copilot "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/gsap-framer-scroll-animation" ~/.claude/skills/github-awesome-copilot-gsap-framer-scroll-animation && rm -rf "$T"
manifest:
skills/gsap-framer-scroll-animation/SKILL.mdsource content
GSAP & Framer Motion — Scroll Animations Skill
Production-grade scroll animations with GitHub Copilot prompts, ready-to-use code recipes, and deep API references.
Design Companion: This skill provides the technical implementation for scroll-driven motion. For the creative philosophy, design principles, and premium aesthetics that should guide how and when to animate, always cross-reference the premium-frontend-ui skill. Together they form a complete approach: premium-frontend-ui decides the what and why; this skill delivers the how.
Quick Library Selector
| Need | Use |
|---|---|
| Vanilla JS, Webflow, Vue | GSAP |
| Pinning, horizontal scroll, complex timelines | GSAP |
| React / Next.js, declarative style | Framer Motion |
| whileInView entrance animations | Framer Motion |
| Both in same Next.js app | See notes in references |
Read the relevant reference file for full recipes and Copilot prompts:
- GSAP →
— ScrollTrigger API, all recipes, React integrationreferences/gsap.md - Framer Motion →
— useScroll, useTransform, all recipesreferences/framer.md
Setup (Always Do First)
GSAP
npm install gsap
import gsap from 'gsap'; import { ScrollTrigger } from 'gsap/ScrollTrigger'; gsap.registerPlugin(ScrollTrigger); // MUST call before any ScrollTrigger usage
Framer Motion (Motion v12, 2025)
npm install motion # new package name since mid-2025 # or: npm install framer-motion — still works, same API
import { motion, useScroll, useTransform, useSpring } from 'motion/react'; // legacy: import { motion } from 'framer-motion' — also valid
Workflow
- Interpret the user's intent to identify if GSAP or Framer Motion is the best fit.
- Read the relevant reference document in
for detailed APIs and patterns.references/ - Suggest the required package installation if not already present.
- Implement the scaffold for the animation structure, adhering to the requested format (React components, hook requirements, or vanilla JS).
- Apply the correct tools (scrolling vs in-view elements) ensuring accessibility options are present and hooks don't cause infinite re-renders.
The 5 Most Common Scroll Patterns
Quick reference — full recipes with Copilot prompts are in the reference files.
1. Fade-in on enter (GSAP)
gsap.from('.card', { opacity: 0, y: 50, stagger: 0.15, duration: 0.8, scrollTrigger: { trigger: '.card', start: 'top 85%' } });
2. Fade-in on enter (Framer Motion)
<motion.div initial={{ opacity: 0, y: 40 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true, margin: '-80px' }} transition={{ duration: 0.6 }} />
3. Scrub / scroll-linked (GSAP)
gsap.to('.hero-img', { scale: 1.3, opacity: 0, ease: 'none', scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true } });
4. Scroll-linked (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. Pinned timeline (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 });
Critical Rules (Apply Always)
- GSAP: always call
before using itgsap.registerPlugin(ScrollTrigger) - GSAP scrub: always use
— easing feels wrong when scrub is activeease: 'none' - GSAP React: use
fromuseGSAP
, never plain@gsap/react
— it auto-cleans ScrollTriggersuseEffect - GSAP debug: add
during development; remove before productionmarkers: true - Framer:
output must go intouseTransform
prop of astyle
element, not a plain divmotion.* - Framer Next.js: always add
at top of any file using motion hooks'use client' - Both: animate only
andtransform
— avoidopacity
,width
,heightbox-shadow - Accessibility: always check
— see each reference file for patternsprefers-reduced-motion - Premium polish: follow the premium-frontend-ui skill principles for motion timing, easing curves, and restraint — animation should enhance, never overwhelm
Copilot Prompting Tips
- Give Copilot the full selector, base image, and scroll range upfront — vague prompts produce vague code
- For GSAP, always specify: selector, start/end strings, whether you want scrub or toggleActions
- For Framer, always specify: which hook (useScroll vs whileInView), offset values, what to transform
- Paste the exact error message when asking
— Copilot fixes are dramatically better with real errors/fix - Use
scope in Copilot Chat so it reads your existing component structure@workspace
Reference Files
| File | Contents |
|---|---|
| Full ScrollTrigger API reference, 10 recipes, React (useGSAP), Lenis, matchMedia, accessibility |
| Full useScroll / useTransform API, 8 recipes, variants, Motion v12 notes, Next.js tips |
Related Skills
| Skill | Relationship |
|---|---|
| premium-frontend-ui | Creative philosophy, design principles, and aesthetic guidelines — defines when and why to animate |