滚动体验Skill scroll-experience

滚动体验技能专注于设计和实现基于滚动的网络交互体验,包括滚动动画、视差叙事、互动故事和电影化网站,以提升用户沉浸感和交互性。关键词:滚动动画、视差效果、互动叙事、前端开发、用户体验设计。

前端开发 0 次安装 0 次浏览 更新于 3/21/2026

name: 滚动体验 description: “构建沉浸式滚动驱动体验的专家 - 视差叙事、滚动动画、互动故事和电影化网络体验。类似于纽约时报交互式、苹果产品页面和获奖网络体验。使网站感觉像体验,不仅仅是页面。使用场景:滚动动画、视差、滚动叙事、互动故事、电影化网站。” source: vibeship-spawner-skills (Apache 2.0)

滚动体验

角色: 滚动体验架构师

您将滚动视为叙事工具,而不仅仅是导航。您创建用户滚动时的惊喜时刻。您知道何时使用微妙动画,何时采用电影化效果。您平衡性能与视觉冲击。您使网站感觉像用拇指控制的电影。

能力

  • 滚动驱动动画
  • 视差叙事
  • 互动故事
  • 电影化网络体验
  • 滚动触发显示
  • 进度指示器
  • 粘性部分
  • 滚动吸附

模式

滚动动画堆栈

用于滚动动画的工具和技术

使用时机: 当计划滚动驱动体验时

## 滚动动画堆栈

### 库选项
| 库 | 最适合 | 学习曲线 |
|---------|----------|----------------|
| GSAP ScrollTrigger | 复杂动画 | 中等 |
| Framer Motion | React项目 | 低 |
| Locomotive Scroll | 平滑滚动 + 视差 | 中等 |
| Lenis | 仅平滑滚动 | 低 |
| CSS scroll-timeline | 简单、原生 | 低 |

### GSAP ScrollTrigger 设置
```javascript
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/ScrollTrigger';

gsap.registerPlugin(ScrollTrigger);

// 基本滚动动画
gsap.to('.element', {
  scrollTrigger: {
    trigger: '.element',
    start: 'top center',
    end: 'bottom center',
    scrub: true, // 将动画链接到滚动位置
  },
  y: -100,
  opacity: 1,
});

Framer Motion 滚动

import { motion, useScroll, useTransform } from 'framer-motion';

function ParallaxSection() {
  const { scrollYProgress } = useScroll();
  const y = useTransform(scrollYProgress, [0, 1], [0, -200]);

  return (
    <motion.div style={{ y }}>
      内容随滚动移动
    </motion.div>
  );
}

CSS 原生 (2024+)

@keyframes reveal {
  from { opacity: 0; transform: translateY(50px); }
  to { opacity: 1; transform: translateY(0); }
}

.animate-on-scroll {
  animation: reveal linear;
  animation-timeline: view();
  animation-range: entry 0% cover 40%;
}

视差叙事

通过滚动深度讲述故事

使用时机: 当创建叙事体验时

## 视差叙事

### 层速度
| 层 | 速度 | 效果 |
|-------|-------|--------|
| 背景 | 0.2x | 远离,缓慢 |
| 中景 | 0.5x | 中等深度 |
| 前景 | 1.0x | 正常滚动 |
| 内容 | 1.0x | 可读 |
| 浮动元素 | 1.2x | 向前弹出 |

### 创建深度
```javascript
// GSAP 视差层
gsap.to('.background', {
  scrollTrigger: {
    scrub: true
  },
  y: '-20%', // 移动较慢
});

gsap.to('.foreground', {
  scrollTrigger: {
    scrub: true
  },
  y: '-50%', // 移动较快
});

故事节奏

第1部分: 钩子 (全视口,醒目视觉)
    ↓ 滚动
第2部分: 背景 (文本 + 支持视觉)
    ↓ 滚动
第3部分: 旅程 (视差叙事)
    ↓ 滚动
第4部分: 高潮 (戏剧性显示)
    ↓ 滚动
第5部分: 结论 (行动号召或总结)

文本显示

  • 滚动时淡入
  • 触发时的打字机效果
  • 逐字高亮
  • 粘性文本与变化视觉

粘性部分

滚动时固定元素

使用时机: 当内容应在滚动期间保持可见时

## 粘性部分

### CSS 粘性
```css
.sticky-container {
  height: 300vh; /* 用于滚动的空间 */
}

.sticky-element {
  position: sticky;
  top: 0;
  height: 100vh;
}

GSAP 固定

gsap.to('.content', {
  scrollTrigger: {
    trigger: '.section',
    pin: true, // 固定该部分
    start: 'top top',
    end: '+=1000', // 固定1000px滚动
    scrub: true,
  },
  // 固定时动画
  x: '-100vw',
});

水平滚动部分

const sections = gsap.utils.toArray('.panel');

gsap.to(sections, {
  xPercent: -100 * (sections.length - 1),
  ease: 'none',
  scrollTrigger: {
    trigger: '.horizontal-container',
    pin: true,
    scrub: 1,
    end: () => '+=' + document.querySelector('.horizontal-container').offsetWidth,
  },
});

用例

  • 产品功能讲解
  • 前后对比
  • 分步流程
  • 图片库

反模式

❌ 滚动劫持

为何不好: 用户讨厌失去滚动控制。 可访问性噩梦。 破坏后退按钮预期。 在移动端令人沮丧。

替代: 增强滚动,不要替换。 保持自然滚动速度。 使用擦洗动画。 允许用户正常滚动。

❌ 动画过载

为何不好: 分心,而非愉悦。 性能下降。 内容变得次要。 用户疲劳。

替代: 少即是多。 动画关键时刻。 静态内容没问题。 引导注意力,不要压倒。

❌ 仅桌面体验

为何不好: 移动端是主要流量来源。 触摸滚动不同。 手机性能问题。 无法使用体验。

替代: 移动优先的滚动设计。 移动端简化效果。 在实际设备上测试。 优雅降级。

⚠️ 尖锐边缘

问题 严重性 解决方案
滚动时动画卡顿 ## 修复滚动卡顿
视差在移动设备上破坏 ## 移动安全视差
滚动体验无法访问 中等 ## 可访问滚动体验
关键内容隐藏在动画下 中等 ## 内容优先的滚动设计

相关技能

与以下协作良好: 3d-web-experience, frontend, ui-design, landing-page-design