做个人站时,最容易犯的错是“每个地方都想动”。结果是页面很热闹,但没人记得住任何一处。
先决定节奏
我会先写下页面想让访客经历的顺序:
- 先看到一句话,知道我是谁
- 再看 2–3 个作品,判断水平
- 最后才是关于和联系方式
动效只服务这个顺序。首屏的字可以慢一点出现,作品卡片悬停可以快一点,正文阅读页最好完全安静。
三个约束
- 一页只安排一个“wow”
- 只动
transform和opacity - 手机端和
prefers-reduced-motion下必须能看
代码上的取舍
能用 CSS 就不上库;需要时间线时才引入 GSAP,并且动态 import()。大部分滚动入场,IntersectionObserver 加一个 class 就够了。
const io = new IntersectionObserver((entries) => {
for (const entry of entries) {
if (entry.isIntersecting) entry.target.classList.add('is-visible');
}
}, { threshold: 0.15 });
document.querySelectorAll('[data-reveal]').forEach((el) => io.observe(el));
动效做得好不好,不在于用了什么库,而在于你删掉了多少。