前端开发
用 GSAP 实现迪士尼十二动画原则:从挤压拉伸到时间线编排
在 GSAP 中制作角色、UI 或元素动画时,按迪士尼十二原则设置 tween/timeline、缓动、交叠与运动路径。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 GSAP 实现迪士尼十二动画原则:从特定
解决思路
- 挤压与拉伸:用 gsap.to('.ball', { scaleX: 1.2, scaleY: 0.8, yoyo: true, repeat: 1, duration: 0.15, ease: 'power2.inOut' }); 让物体在运动方向压扁、垂直方向拉伸,并用 yoyo/repeat 回弹。
- 预备动作:创建 gsap.timeline(),先 tl.to('.character', { y: 20, scaleY: 0.9, duration: 0.2 }) 蓄力,再 .to('.character', { y: -200, duration: 0.4, ease: 'power2.out' }) 执行主动作。
- 舞台呈现:用 gsap.to('.background', { filter: 'blur(3px)', opacity: 0.6 }); 弱化背景,再用 gsap.to('.hero', { scale: 1.1, zIndex: 10 }); 突出主体。
- 直进/关键姿势:用 gsap.to('.sprite', { keyframes: [ { x: 0, y: 0 }, { x: 100, y: -50 }, { x: 200, y: 0 }, { x: 300, y: -30 } ], duration: 1 }); 以显式 keyframes 定义关键姿势序列。
- 跟随与交叠动作:创建 timeline,先 tl.to('.body', { x: 200, duration: 0.5 }),再用 .to('.hair', { x: 200, duration: 0.5 }, '-=0.4') 与 .to('.cape', { x: 200, duration: 0.6 }, '-=0.45') 让头发、披风延迟重叠并产生拖拽。
- 慢入慢出:用 gsap.to('.element', { x: 300, duration: 0.6, ease: 'power2.inOut' }); 设置慢入慢出;也可用 'power3.in'、'power3.out'、'elastic.out' 等 ease。
- 弧线:用 gsap.to('.ball', { motionPath: { path: [ { x: 0, y: 0 }, { x: 100, y: -100 }, { x: 200, y: 0 } ], curviness: 1.5 }, duration: 1 }); 通过 motionPath 与 curviness 让元素沿弧线运动。
- 次级动作:创建 timeline,先 tl.to('.button', { scale: 1.1, duration: 0.2 }),再用 .to('.icon', { rotation: 15, duration: 0.15 }, '<') 同时触发图标旋转,并用 .to('.particles', { opacity: 1, stagger: 0.05 }, '<0.1') 让粒子错开出现。
- 时间节奏:快动作可用 gsap.to('.fast', { x: 100, duration: 0.15 });;柔和漂浮可用 gsap.to('.slow', { y: -20, duration: 2, ease: 'sine.inOut', yoyo: true, repeat: -1 });。
- 夸张:用 gsap.to('.element', { scale: 1.5, rotation: 720, duration: 0.8, ease: 'back.out(2)' }); 放大缩放、多圈旋转并用回弹 easing 制造过冲。
- 立体造型:用 gsap.to('.box', { rotationX: 45, rotationY: 30, transformPerspective: 1000, duration: 0.5 }); 设置 3D 旋转和透视。
- 吸引力:用 gsap.to('.card', { scale: 1.02, boxShadow: '0 20px 40px rgba(0,0,0,0.2)', duration: 0.3, ease: 'power1.out' }); 通过轻微放大与阴影增强视觉吸引力。
- GSAP 时间线模式:创建 const masterTL = gsap.timeline({ defaults: { ease: 'power2.out' }});,然后 masterTL.add(anticipation()).add(mainAction()).add(followThrough()); 把预备、主动作、跟随动作串联成主时间线。
- 使用 gsap.timeline() 序列化动画。
- 使用 ease 选择 30+ 内置缓动函数。
- 使用 stagger 为多个元素设置错开偏移。
- 使用 motionPath 制作弧线和路径动画。
- 使用 yoyo / repeat 控制循环。
- 使用 '<' / '-=0.2' 位置参数控制重叠。
适用边界 · 注意事项
- 未引入 GSAP 或不允许增加动画库依赖的前端项目不适用。
- 仅需简单 CSS transition 或一次性淡入淡出时,不必使用 GSAP timeline。
- 若项目必须严格遵循 prefers-reduced-motion 且没有降级方案,不应直接套用这些动画。