gsap-fundamentals

安装量: 193
排名: #4433

安装

npx skills add https://github.com/bbeierle12/skill-mcp-claude --skill gsap-fundamentals

GSAP Fundamentals

Core animation concepts with GreenSock Animation Platform.

Quick Start npm install gsap

import gsap from 'gsap';

// Basic tween gsap.to('.box', { x: 200, duration: 1, ease: 'power2.out' });

Core Concepts Tween Types Method Description Use Case gsap.to() Animate from current → target Most common gsap.from() Animate from target → current Entrance animations gsap.fromTo() Animate from defined start → end Full control gsap.set() Instantly set properties Initial state Basic Tweens // To: current state → target gsap.to('.element', { x: 100, y: 50, rotation: 360, duration: 1 });

// From: target → current state gsap.from('.element', { opacity: 0, y: -50, duration: 0.5 });

// FromTo: explicit start and end gsap.fromTo('.element', { opacity: 0, scale: 0.5 }, // from { opacity: 1, scale: 1, duration: 1 } // to );

// Set: instant property change gsap.set('.element', { visibility: 'visible', opacity: 0 });

Animation Properties Transform Properties gsap.to('.element', { // Position x: 100, // translateX in pixels y: 50, // translateY in pixels xPercent: 50, // translateX as percentage of element width yPercent: -100, // translateY as percentage of element height

// Rotation rotation: 360, // 2D rotation in degrees rotationX: 45, // 3D rotation around X axis rotationY: 45, // 3D rotation around Y axis

// Scale scale: 1.5, // Uniform scale scaleX: 2, // Horizontal scale scaleY: 0.5, // Vertical scale

// Skew skewX: 20, // Horizontal skew in degrees skewY: 10, // Vertical skew in degrees

// Transform origin transformOrigin: 'center center', transformPerspective: 500,

duration: 1 });

CSS Properties gsap.to('.element', { // Colors color: '#00F5FF', backgroundColor: '#FF00FF', borderColor: 'rgba(255, 215, 0, 0.5)',

// Dimensions width: 200, height: '50%', padding: 20, margin: '10px 20px',

// Display opacity: 0.8, visibility: 'visible', display: 'block',

// Border borderRadius: '50%', borderWidth: 2,

// Shadow boxShadow: '0 0 20px rgba(0, 245, 255, 0.5)',

duration: 1 });

SVG Properties gsap.to('svg path', { // Path morphing (requires MorphSVGPlugin) morphSVG: '#targetPath',

// Draw SVG strokeDashoffset: 0, drawSVG: '100%',

// SVG attributes attr: { cx: 100, cy: 100, r: 50, fill: '#00F5FF' },

duration: 2 });

Timing Controls Duration and Delay gsap.to('.element', { x: 100, duration: 1, // Animation length in seconds delay: 0.5, // Wait before starting repeat: 3, // Repeat 3 times (4 total plays) repeatDelay: 0.2, // Pause between repeats yoyo: true // Reverse on alternate repeats });

Infinite Repeat gsap.to('.spinner', { rotation: 360, duration: 1, repeat: -1, // Infinite repeat ease: 'none' // Linear for constant speed });

Stagger // Animate multiple elements with offset timing gsap.to('.card', { y: 0, opacity: 1, duration: 0.5, stagger: 0.1 // 0.1s delay between each element });

// Advanced stagger gsap.to('.grid-item', { scale: 1, duration: 0.3, stagger: { each: 0.05, // Time between each from: 'center', // Start from center, edges, random, etc. grid: [4, 4], // Grid dimensions for 2D stagger axis: 'x' // Stagger along axis } });

Easing Functions Built-in Eases // Power eases (1-4, higher = more pronounced) 'power1.out' // Subtle deceleration 'power2.out' // Smooth deceleration (default feel) 'power3.out' // Strong deceleration 'power4.out' // Very strong deceleration

// Directional suffixes 'power2.in' // Accelerate 'power2.out' // Decelerate 'power2.inOut' // Accelerate then decelerate

// Special eases 'back.out(1.7)' // Overshoot then settle 'elastic.out' // Springy bounce 'bounce.out' // Ball-drop bounce 'circ.out' // Circular motion 'expo.out' // Exponential 'sine.out' // Gentle sine wave

Ease Comparison // UI Elements - snappy, responsive gsap.to('.button', { scale: 1.1, ease: 'power2.out', duration: 0.2 });

// Entrances - smooth deceleration gsap.from('.modal', { y: 100, opacity: 0, ease: 'power3.out', duration: 0.5 });

// Playful - bounce or elastic gsap.to('.notification', { y: 0, ease: 'back.out(1.7)', duration: 0.6 });

// Mechanical - linear gsap.to('.progress', { width: '100%', ease: 'none', duration: 2 });

Custom Easing import { CustomEase } from 'gsap/CustomEase'; gsap.registerPlugin(CustomEase);

// Create custom ease from SVG path CustomEase.create('custom', 'M0,0 C0.25,0.1 0.25,1 1,1');

gsap.to('.element', { x: 200, ease: 'custom', duration: 1 });

Controlling Tweens Tween Instance Methods const tween = gsap.to('.element', { x: 200, duration: 2, paused: true // Start paused });

// Playback control tween.play(); tween.pause(); tween.resume(); tween.reverse(); tween.restart();

// Seeking tween.seek(0.5); // Jump to 0.5 seconds tween.progress(0.5); // Jump to 50% tween.time(1); // Jump to 1 second

// Speed control tween.timeScale(2); // Double speed tween.timeScale(0.5); // Half speed

// State tween.isActive(); // Currently animating? tween.progress(); // Get current progress (0-1)

// Cleanup tween.kill(); // Stop and remove

Callbacks gsap.to('.element', { x: 200, duration: 1,

// Lifecycle callbacks onStart: () => console.log('Started'), onUpdate: () => console.log('Frame update'), onComplete: () => console.log('Finished'), onRepeat: () => console.log('Repeated'), onReverseComplete: () => console.log('Reverse finished'),

// With parameters onComplete: (param) => console.log('Done:', param), onCompleteParams: ['myValue'],

// Access tween in callback onUpdate: function() { console.log('Progress:', this.progress()); } });

Targeting Elements Selector Strings // CSS selectors gsap.to('.class', { x: 100 }); gsap.to('#id', { x: 100 }); gsap.to('div', { x: 100 }); gsap.to('[data-animate]', { x: 100 }); gsap.to('.parent .child', { x: 100 });

DOM References // Direct element reference const element = document.querySelector('.box'); gsap.to(element, { x: 100 });

// NodeList / Array const elements = document.querySelectorAll('.item'); gsap.to(elements, { x: 100, stagger: 0.1 });

// Array of mixed targets gsap.to(['.box', '#circle', element], { opacity: 0.5 });

Object Properties // Animate any object property const obj = { value: 0, x: 100, y: 200 };

gsap.to(obj, { value: 100, x: 500, duration: 2, onUpdate: () => { console.log(obj.value); // Interpolated value // Update Three.js, Canvas, etc. } });

Common Patterns Fade In/Out // Fade in gsap.from('.element', { opacity: 0, duration: 0.5 });

// Fade out and remove gsap.to('.element', { opacity: 0, duration: 0.5, onComplete: () => element.remove() });

Slide Animations // Slide in from left gsap.from('.panel', { x: -100, opacity: 0, duration: 0.5, ease: 'power2.out' });

// Slide in from bottom gsap.from('.notification', { y: 50, opacity: 0, duration: 0.4, ease: 'power3.out' });

Scale Animations // Pop in gsap.from('.modal', { scale: 0.8, opacity: 0, duration: 0.3, ease: 'back.out(1.7)' });

// Pulse gsap.to('.heart', { scale: 1.2, duration: 0.3, repeat: -1, yoyo: true, ease: 'power1.inOut' });

Temporal Collapse Patterns

Countdown-specific animations:

// Digit flip animation function flipDigit(element, newValue) { gsap.to(element, { rotationX: -90, opacity: 0, duration: 0.3, ease: 'power2.in', onComplete: () => { element.textContent = newValue; gsap.fromTo(element, { rotationX: 90, opacity: 0 }, { rotationX: 0, opacity: 1, duration: 0.3, ease: 'power2.out' } ); } }); }

// Time dilation pulse (cyan glow) gsap.to('.countdown-digit', { textShadow: '0 0 30px #00F5FF, 0 0 60px #00F5FF', duration: 0.5, repeat: -1, yoyo: true, ease: 'sine.inOut' });

// Final countdown intensity ramp function intensifyCountdown(secondsRemaining) { const intensity = 1 - (secondsRemaining / 60); gsap.to('.glow-element', { filter: brightness(${1 + intensity}), duration: 0.5 }); }

Performance Tips // Use transforms over layout properties // GOOD gsap.to('.element', { x: 100, y: 50, scale: 1.2 });

// AVOID (triggers layout) gsap.to('.element', { left: 100, top: 50, width: 200 });

// Force GPU acceleration gsap.set('.element', { force3D: true });

// Kill tweens when component unmounts const tween = gsap.to('.element', { x: 100 }); // Later... tween.kill();

// Or kill all tweens on a target gsap.killTweensOf('.element');

Reference See gsap-sequencing for timelines and complex sequences See gsap-react for React integration patterns See gsap-scrolltrigger for scroll-based animations

返回排行榜