Communitygithub.com

yuzhang-ai/web-animation-skill

Entwerfen und entwickeln Sie interaktive Web-Animationen, die sich handgefertigt und nicht schablonenhaft anfühlen – für Seitenlade- und Hero-Sequenzen, scrollgesteuerte Effekte, Parallax, Text-Enthüllungen, Mikrointeraktionen und mehr.

Was ist web-animation-skill?

Diese Skill dient als umfassende Anleitung zum Erstellen hochwertiger Web-Animationen. Sie legt einen strukturierten Workflow fest: Zuerst wird das Projekt analysiert (Framework, vorhandene Bibliotheken), dann der Zweck der Animation definiert (Feedback, Orientierung, Aufmerksamkeit oder Erzählung), anschließend das leichteste geeignete Tool ausgewählt (z. B. CSS für einfache Hover-Effekte, GSAP für komplexe Scroll-Trigger oder Motion für React-Komponenten) und schließlich die Animation mit nicht verhandelbaren Prinzipien umgesetzt – darunter die Optimierung von `transform` und `opacity`, die Beachtung einer reduzierten Bewegungspräferenz (`prefers-reduced-motion`), das Vermeiden von versteckten Inhalten vor JavaScript-Ausführung sowie die Sicherstellung unterbrechbarer Interaktionen und ordnungsgemäßer Bereinigung. Die Skill listet detailliert die unterstützten Bibliotheken und Technologien auf (GSAP inkl. ScrollTrigger, SplitText, Flip; Motion; Anime.js v4; View Transitions API; Lottie; Rive; D3; Flubber; Konva; Three.js/React Three Fiber) und bietet minimale Startcode-Blöcke sowie eine Checkliste zur Überprüfung im echten Browser. Sie ist für Entwickler gedacht, die in React, Next.js, Vue, Svelte oder reinem HTML arbeiten, und betont, dass eine orchestrierte Bewegung mehr bewirkt als ein Aufblenden jeder einzelnen Sektion.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yuzhang-ai/web-animation-skill/tree/HEAD

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Web-Animation

Gute Web-Bewegung ist zuerst eine Designentscheidung und erst dann ein Bibliotheksaufruf. Befolgen Sie den untenstehenden Workflow in der angegebenen Reihenfolge; laden Sie Regeldateien nur, wenn ein Schritt sie benötigt.

Workflow

1. Lesen Sie das Projekt, bevor Sie etwas auswählen

  • Überprüfen Sie package.json. Wenn eine Animationsbibliothek bereits installiert ist, verwenden Sie diese. Fügen Sie für einen einzelnen Effekt keine zweite hinzu.
  • Notieren Sie sich das Framework (React / Next.js App Router / Vue / Svelte / reines HTML) und ob Komponenten serverseitig gerendert werden (in Next.js ist "use client" für clientseitige Bewegung erforderlich).
  • Suchen Sie nach vorhandenen Bewegungs-Tokens (Dauern, Easing-Kurven) in CSS-Variablen oder einer Theme-Datei und verwenden Sie diese wieder.

2. Entscheiden Sie, wofür die Bewegung gedacht ist

Jede Animation braucht eine Aufgabe. Wählen Sie eine pro Element:

AufgabeBeispielTypisches Budget
Feedback – eine Aktion bestätigenTastendruck, Umschalten, In-die-Zwischenablage-kopieren100–200 ms
Orientierung – zeigen, woher etwas kam oder wohin es gehtModal öffnet sich von seinem Auslöser, Listenelement wird neu angeordnet, Routenwechsel200–400 ms
Aufmerksamkeit – auf eine Sache lenkeneine einzelne Hero-Sequenz, eine neue Benachrichtigung400–1200 ms, einmalig
Erzählung – eine an den Scroll gekoppelte Geschichte erzählenfixierte Produkt-Walkthrough, gescrubbte Zeitleistean die Scroll-Entfernung gekoppelt

Wenn ein Element keine Aufgabe hat, animieren Sie es nicht. Ein orchestrierter Moment schlägt ein Aufblenden in jedem Abschnitt. Lesen Sie rules/motion-design.md für Dauern, Easing, Choreografie und die Checkliste für "hochwertiges Gefühl".

3. Wählen Sie das leichteste Werkzeug, das die Aufgabe erfüllt

Zuerst die Plattform, dann die Bibliotheken:

BedarfGreifen Sie zuRegeldatei
Hover, Fokus, Drücken, einfache SchleifenCSS-Übergänge / @keyframescss-keyframes.md
Dialog, Popover, Dropdown: Eintritt und AustrittCSS @starting-style + transition-behavior: allow-discretecss-keyframes.md
Seiten-/Routen-Übergänge, Shared-Element-Morphing zwischen ZuständenView Transitions APIview-transitions.md
Einfaches scroll-verknüpftes Einblenden, Fortschrittsbalken, ParallaxCSS animation-timeline: view() / scroll()scroll-animations.md
Fixierte Abschnitte, gescrubbte mehrschrittige Zeitleisten, horizontales ScrollenGSAP + ScrollTriggergsap.md
Split-Text-/Linien-Mask-Headline-EnthüllungenGSAP SplitTextgsap.md
React Eintritt/Austritt, Layout- und Shared-Layout-Animation, GestenMotion for React (motion/react)framer-motion.md
Framework-freie imperative Animation, FedernMotion (motion)motion-one.md
SVG-Linienzeichnung und Morphing ohne GSAPAnime.js v4 (svg.createDrawable, svg.morphTo)animejs.md
Komplexes Pfad-Morphing zwischen unzusammenhängenden FormenFlubber (oder GSAP MorphSVG)flubber.md
After Effects AnimationswiedergabeLottie (dotLottie)lottie.md
Interaktive, zustandsgesteuerte illustrierte AnimationRiverive.md
Animierte DiagrammeD3-Übergänged3.md
Viele interaktive 2D-Formen (Editoren, Diagramme)Konvakonva.md
3D, Partikel, ShaderThree.js / React Three Fiberthree-js.md

Wenn die Wahl nicht offensichtlich ist, lesen Sie rules/choosing-library.md.

4. Bauen Sie es mit den nicht verhandelbaren Grundsätzen

Diese gelten für jede Animation in jeder Bibliothek:

  1. Animieren Sie transform und opacity. Vermeiden Sie das Animieren von width, height, top, left, margin; verwenden Sie scale/translate, FLIP (GSAP Flip, Motion layout) oder View Transitions für Layoutänderungen. Siehe rules/performance.md.
  2. Respektieren Sie prefers-reduced-motion. Ersetzen Sie Bewegung durch einen Deckkraft-Übergang oder eine sofortige Änderung; verstecken Sie niemals einfach den Inhalt des Eintritts, sodass er unsichtbar bleibt. Scroll-gescrubbte Effekte sollten statisch werden.
  3. Verstecken Sie niemals Inhalte, bis JS läuft. Setzen Sie den anfänglichen versteckten Zustand in JS (oder hinter einer .js-Klasse), sodass der Inhalt sichtbar ist, falls das Skript fehlschlägt. Vermeiden Sie bei SSR ein Aufblitzen von sichtbaren und dann versteckten Inhalten, indem Sie anfängliche Stile vor dem ersten Paint anwenden.
  4. Räumen Sie auf. Machen Sie Animationen beim Aushängen rückgängig oder beenden Sie sie (useGSAP, createScope().revert(), gsap.context), und beenden Sie ScrollTrigger bei Routenwechseln.
  5. Halten Sie die Interaktion reaktionsschnell. Unterbrechbare Animationen für alles, was vom Benutzer ausgelöst wird: Ein zweiter Klick darf sich nicht hinter dem ersten anstellen. Blockieren Sie niemals die Eingabe, während Sie auf das Ende einer Animation warten.
  6. Animieren Sie den Fokus nicht weg. Elemente, die sich bewegen, müssen einen sichtbaren :focus-visible-Zustand behalten, und animierte Dialoge müssen den Fokus weiterhin korrekt setzen.

5. Überprüfen Sie in einem echten Browser

Melden Sie eine Animation nicht als erledigt, nur weil Sie den Code gelesen haben. Führen Sie sie aus und überprüfen Sie:

  • Sie wird abgespielt, und der Endzustand entspricht dem Design (Screenshot während der Animation und im Ruhezustand).
  • Keine Konsolenfehler, kein Layout-Shift beim Start.
  • Emulieren Sie prefers-reduced-motion: reduce und bestätigen Sie, dass die reduzierte Version funktioniert und der Inhalt sichtbar ist.
  • Ändern Sie die Größe auf eine mobile Breite: Fixierte Abschnitte und geteilter Text funktionieren noch (bei Größenänderung neu teilen).
  • Scrollgesteuerte Effekte funktionieren sowohl beim Aufwärts- als auch beim Abwärtsscrollen und nach einem Neuladen mitten auf der Seite.
  • Performance-Panel: Keine langen Frames während der Animation, keine Layout-/Paint-Spitzen durch animierte Eigenschaften.

Minimale Startpunkte

// GSAP + ScrollTrigger (npm i gsap)
import gsap from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);

gsap.from(".card", {
  y: 40, opacity: 0, duration: 0.8, ease: "expo.out", stagger: 0.08,
  scrollTrigger: { trigger: ".cards", start: "top 80%" },
});
// Motion for React (npm i motion)
import { motion, AnimatePresence } from "motion/react";

<AnimatePresence>
  {open && (
    <motion.div
      key="panel"
      initial={{ opacity: 0, y: 8 }}
      animate={{ opacity: 1, y: 0 }}
      exit={{ opacity: 0, y: 8 }}
      transition={{ type: "spring", duration: 0.35, bounce: 0 }}
    />
  )}
</AnimatePresence>
/* Plattform-natives Scroll-Einblenden: Chrome 115+, Safari 26+, Firefox 159+ */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .reveal {
      animation: reveal linear both;
      animation-timeline: view();
      animation-range: entry 10% cover 30%;
    }
  }
}
@keyframes reveal { from { opacity: 0; translate: 0 2rem; } }

Regeldateien

Arbeitsbeispiele dieser Techniken befinden sich in demos/.

Verwandte Skills