关于 scroll-animations
面向前端设计与开发的滚动动画技能,将 Disney 的 12 条动画原则用于滚动触发的动效。内容包括触发时机、视差、实现模式及减少动态效果的替代方案。
主要功能
- 01将动画原则用于滚动动效
- 02提供滚动触发时序建议
- 03介绍 Intersection Observer 模式
- 04说明 CSS 滚动关联动画
- 05包含减少动态效果的替代方案
适用场景
- 01制作随滚动出现的内容
- 02设置视差或粘性标题动效
- 03为滚动进度条添加动画
- 04为减少动态效果偏好提供替代方案
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dylantarre/ animation-principles --skill scroll-animations安装后在 Claude Code 中输入/scroll-animations确认已加载。
详细介绍
滚动动画
将迪士尼的 12 条原则应用于滚动触发的动效。
原则应用
挤压与拉伸:快速滚动时,元素可以略微压缩;停止滚动时恢复原状。
预备动作:内容应在完全显示前稍微可见。可见度达到 10-20% 时开始动画。
舞台调度:按阅读顺序显示内容,从上到下、从左到右依次呈现。
连续动作与关键姿势:定义清晰的“隐藏”和“显示”姿势。滚动位置决定两者之间的插值。
跟随与重叠:错开显示时机。第一个元素在进入视口 20% 时触发,下一个在 25% 时触发,依此类推。
慢入与慢出:使用缓出效果呈现滚动触发的内容,让内容平稳到位。
弧线运动:视差元素随滚动沿曲线移动。垂直滚动时略微水平偏移。
次要动作:淡入、滑动和缩放可以组合使用,让显示效果更加丰富。
时长:
- 显示动画:400-600ms(允许滚动继续)
- 视差:实时,比例为 1:1 或小于 1:1
- 粘性过渡:200-300ms
夸张:滚动动画应保持微妙,因为节奏由用户控制。让滚动速度成为夸张的表现形式。
扎实绘制:元素不应突然跳动或瞬移。所有滚动位置上的插值都应平滑。
吸引力:滚动动画应鼓励用户探索,而非妨碍探索。
时长建议
| 滚动动画 | 时长 | 触发点 | 缓动 |
|---|---|---|---|
| 淡入 | 500ms | 可见度 20% | 缓出 |
| 向上滑入 | 600ms | 可见度 15% | 缓出 |
| 视差 | 实时 | 持续 | 线性 |
| 粘性页眉 | 200ms | 阈值 | 缓出 |
| 进度条 | 实时 | 持续 | 线性 |
| 区块显示 | 600ms | 可见度 25% | 缓出 |
实现模式
/* Scroll-triggered reveal */
.reveal {
opacity: 0;
transform: translateY(30px);
transition: opacity 500ms ease-out, transform 600ms ease-out;
}
.reveal.visible {
opacity: 1;
transform: translateY(0);
}
/* CSS-only parallax */
.parallax-container {
perspective: 1px;
overflow-y: auto;
}
.parallax-slow {
transform: translateZ(-1px) scale(2);
}
Intersection Observer 模式
const observer = new IntersectionObserver(
(entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
}
});
},
{ threshold: 0.2, rootMargin: '0px 0px -10% 0px' }
);
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
滚动联动动画(CSS)
@keyframes reveal {
from { opacity: 0; transform: translateY(30px); }
to { opacity: 1; transform: translateY(0); }
}
.scroll-reveal {
animation: reveal linear both;
animation-timeline: view();
animation-range: entry 0% entry 50%;
}
关键规则
- 绝不阻止滚动或劫持滚动行为
- 动画应在视口内完成,不应要求精确的滚动位置
- 尽早触发(可见度达到 10-20%),确保动画在完全进入视口前完成
- 提供
prefers-reduced-motion替代方案:立即显示,不使用视差 - 在移动设备上测试,确保滚动动画达到 60fps 且流畅
评论
支持 Markdown