diff --git a/index.html b/index.html index 69fec66..605093c 100644 --- a/index.html +++ b/index.html @@ -358,35 +358,33 @@ #pain-points .pain-grid > .fade-up:nth-child(5) { animation-delay: 0.55s; } #pain-points .pain-grid > .fade-up:nth-child(6) { animation-delay: 0.65s; } } - @keyframes sectionFadeIn { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } - - /* 移动端:痛点和思路板块 - GPU 加速平滑动画 */ + /* 移动端:痛点和思路板块 - 错位动画 */ @media (max-width: 900px) { - /* 默认状态:微弱可见 + 子元素透明 */ + /* 默认状态:卡片微弱可见 */ #pain-points .pain-item { opacity: 0.08; - transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1); + transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1); } + /* 内容元素默认在下方(准备从下往上滑入) */ #pain-points .pain-item .pain-icon, #pain-points .pain-item h3, - #pain-points .pain-item p, - #pain-points .pain-item .pain-num { + #pain-points .pain-item p { opacity: 0; - transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), - transform 0.6s cubic-bezier(0.16, 1, 0.3, 1); + transform: translateY(40px); + transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), + transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); } #pain-points .pain-item .pain-icon { - transform: scale(0.7) translateY(15px); - } - #pain-points .pain-item h3, - #pain-points .pain-item p { - transform: translateY(25px); + transform: scale(0.6) translateY(40px); } + /* 数字默认在上方(准备从上往下滑入) */ #pain-points .pain-item .pain-num { - transform: translateY(15px); + opacity: 0; + transform: translateY(-70px); + transition: opacity 0.9s ease, transform 0.8s cubic-bezier(0.16, 1, 0.3, 1); } - /* 进入视口后:平滑过渡 */ + /* 进入视口后:内容上移,数字下落 */ #pain-points .pain-item.in-view { opacity: 1; } @@ -398,31 +396,31 @@ #pain-points .pain-item.in-view h3 { opacity: 1; transform: translateY(0); - transition-delay: 0.1s; + transition-delay: 0.12s; } #pain-points .pain-item.in-view p { opacity: 1; transform: translateY(0); - transition-delay: 0.18s; + transition-delay: 0.2s; } #pain-points .pain-item.in-view .pain-num { - opacity: 0.12; + opacity: 0.15; transform: translateY(0); - transition-delay: 0.25s; + transition-delay: 0.08s; } /* 思路板块同样 */ #approach .approach-item { opacity: 0.08; - transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1); + transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1); } #approach .approach-item .approach-step, #approach .approach-item .approach-body h3, #approach .approach-item .approach-body p { opacity: 0; - transform: translateY(20px); - transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1), - transform 0.6s cubic-bezier(0.16, 1, 0.3, 1); + transform: translateY(30px); + transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), + transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); } #approach .approach-item.in-view { opacity: 1; @@ -435,12 +433,12 @@ #approach .approach-item.in-view .approach-body h3 { opacity: 1; transform: translateY(0); - transition-delay: 0.1s; + transition-delay: 0.12s; } #approach .approach-item.in-view .approach-body p { opacity: 1; transform: translateY(0); - transition-delay: 0.18s; + transition-delay: 0.2s; } } @@ -463,27 +461,29 @@ margin-right: auto; max-width: 90%; } + /* 背景网格 - 钉在墙上完全不动 */ .pain-grid-bg { - position: absolute; + position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 0; animation: none; background-image: - linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px), - linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px); + linear-gradient(rgba(255,255,255,0.06) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,0.06) 1px, transparent 1px); background-size: 60px 60px; } .pain-glow { - position: absolute; + position: fixed; top: 50%; left: 50%; width: 400px; height: 400px; transform: translate(-50%, -50%); - background: radial-gradient(circle, rgba(255,255,255,0.06) 0%, transparent 70%); + background: radial-gradient(circle, rgba(255,255,255,0.08) 0%, transparent 70%); animation: glowPulse 6s ease-in-out infinite alternate; z-index: 0; pointer-events: none; } + /* 内容层 - 在背景上正常滚动 */ .pain-grid { display: flex; flex-direction: column; @@ -556,19 +556,16 @@ padding-right: 0; } - /* 编号 - 超大背景装饰 + 视差 */ + /* 编号 - 超大背景装饰 */ .pain-num { position: absolute; - bottom: 30px; - right: 24px; - font-size: 100px; + bottom: 40px; + right: 30px; + font-size: 110px; font-weight: 900; - color: rgba(255,255,255,0.04); + color: rgba(255,255,255,0.08); letter-spacing: -5px; line-height: 1; - transition: opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1); - will-change: transform; - transform: translateY(0); } /* 破局之道 - 高潮区域 */ @@ -955,9 +952,8 @@ }, { threshold: 0.15, rootMargin: "0px 0px -50px 0px" }); document.querySelectorAll('.fade-up').forEach(el => observer.observe(el)); - // 移动端:轻量级 IntersectionObserver + 视差滚动 + // 移动端:轻量级 IntersectionObserver(入场错位动画由 CSS transition 处理) if (window.innerWidth <= 900) { - // 1. 入场动画 const mobileItems = document.querySelectorAll('#pain-points .pain-item, #approach .approach-item'); const mobileObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { @@ -965,25 +961,6 @@ }); }, { threshold: 0.05, rootMargin: "0px 0px -5% 0px" }); mobileItems.forEach(item => mobileObserver.observe(item)); - - // 2. 背景编号视差(仅操作 transform,GPU 加速) - let ticking = false; - const painNums = document.querySelectorAll('.pain-num'); - window.addEventListener('scroll', () => { - if (!ticking) { - requestAnimationFrame(() => { - painNums.forEach(num => { - const rect = num.parentElement.getBoundingClientRect(); - // 计算元素在视口中的位置比例 - const progress = -rect.top / window.innerHeight; - // 视差位移:数字移动速度是滚动速度的 30% - num.style.transform = `translateY(${progress * -40}px)`; - }); - ticking = false; - }); - ticking = true; - } - }, { passive: true }); }