fix: 修复所有板块 pin 滚动空白间隙 + 服务卡片适配屏幕
🐛 问题1: 滚动到下一个内容时有空白区 根因: 时间线动画之间有间隙(动画 duration < 步骤间距) 修复: 所有板块改用 cursor 模式,每个步骤精确衔接,无空白 🐛 问题2: 服务卡片太大,一屏显示不全 根因: 卡片高度固定 h-[380px],不适配小屏幕 修复: 改用 clamp(260px, 38vh, 400px) 自适应屏幕高度 🔧 修复的 6 个板块: 1. HomeTestimonials - 淡入淡出切换无间隙 2. HomeServices - 卡片聚焦无间隙 + 自适应高度 3. HomeAchievements - 数字展示无间隙 4. HomeTechStack - 球体旋转无间隙 5. HomeProcess - 步骤展示 + 横向滚动无间隙 6. HomeUpdates - 卡片分批出现无间隙 📐 cursor 模式: 每一步动画 duration 正好等于步骤间距, 动画结束 = 下一步开始,完美衔接 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -213,16 +213,17 @@ onMounted(async () => {
|
||||
gsap.set(item, { autoAlpha: 0, x: index % 2 === 0 ? -100 : 100 })
|
||||
})
|
||||
|
||||
// 统一时间线:逐个展示
|
||||
// 统一时间线:逐个展示,无空白
|
||||
const tl = gsap.timeline()
|
||||
let cursor = 0
|
||||
|
||||
for (let i = 0; i < totalItems; i++) {
|
||||
// 每个成就项入场,前一个淡出
|
||||
if (i > 0) {
|
||||
// 前一个淡出,和后一个淡入在同一时间开始
|
||||
tl.to(achievementElements.value[i - 1], {
|
||||
autoAlpha: 0, x: i % 2 === 0 ? 100 : -100,
|
||||
duration: 0.5, ease: 'power2.in',
|
||||
}, i)
|
||||
duration: 0.6, ease: 'power2.in',
|
||||
}, cursor)
|
||||
}
|
||||
tl.to(achievementElements.value[i], {
|
||||
autoAlpha: 1, x: 0, duration: 0.8, ease: 'power3.out',
|
||||
@@ -230,13 +231,14 @@ onMounted(async () => {
|
||||
const numberEl = numberElements.value[i]
|
||||
if (numberEl) animateNumber(numberEl, achievements[i].number, achievements[i].suffix)
|
||||
}
|
||||
}, i + 0.2)
|
||||
}, cursor + 0.1)
|
||||
cursor += 1
|
||||
}
|
||||
|
||||
ScrollTrigger.create({
|
||||
trigger: rootRef.value,
|
||||
start: 'top top',
|
||||
end: () => `+=${(totalItems + 1) * window.innerHeight}`,
|
||||
end: () => `+=${cursor * window.innerHeight}`,
|
||||
pin: true,
|
||||
scrub: 0.5,
|
||||
anticipatePin: 1,
|
||||
|
||||
Reference in New Issue
Block a user