diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx index bca98c9..a6a1101 100644 --- a/src/pages/LandingPage.tsx +++ b/src/pages/LandingPage.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef } from 'react'; -import { Button, Container, Title, Text, Group, Stack } from '@mantine/core'; +import { Button, Container, Title, Text, Group, Stack, Paper, ThemeIcon, SimpleGrid, Box } from '@mantine/core'; import { useNavigate } from 'react-router-dom'; import iconUrl from '../assets/icon.png'; @@ -48,7 +48,7 @@ function ZenBackground() { let strokes: InkStroke[] = []; let time = 0; let lastStrokeTime = 0; - const strokeInterval = 30; // 每隔一段时间生成新笔触 + const strokeInterval = 30; // 生成随机笔触 const createStroke = (): InkStroke | null => { @@ -65,7 +65,7 @@ function ZenBackground() { speed: random(0.4, 1.0), inkAlpha: random(10, 30), baseWeight: random(0.3, 1.5), - maxLength: random(30, 90), // 缩短笔触长度,加快消失 + maxLength: random(30, 90), currentLength: 0, complete: false, }; @@ -77,7 +77,6 @@ function ZenBackground() { for (let i = 0; i < 8; i++) { const stroke = createStroke(); if (stroke) { - // 随机偏移起始位置 stroke.currentLength = random(0, stroke.maxLength * 0.5); strokes.push(stroke); } @@ -93,7 +92,7 @@ function ZenBackground() { const animate = () => { time += 0.008; - // 快速淡出背景 - 让水墨痕迹更快消失 + // 快速淡出背景 if (Math.floor(time * 125) % 3 === 0) { ctx.fillStyle = 'rgba(250, 249, 247, 0.12)'; ctx.fillRect(0, 0, canvas.width, canvas.height); @@ -102,9 +101,7 @@ function ZenBackground() { // 定期生成新笔触 if (time - lastStrokeTime > strokeInterval * 0.01) { lastStrokeTime = time; - // 移除已完成太久的笔触 strokes = strokes.filter(s => !s.complete || s.currentLength < s.maxLength); - // 添加新笔触(随机数量) const newCount = Math.floor(random(0, 2)); for (let i = 0; i < newCount; i++) { const stroke = createStroke(); @@ -116,18 +113,15 @@ function ZenBackground() { for (const stroke of strokes) { if (stroke.complete) continue; - // 噪声驱动 const n = noise(stroke.x, stroke.y, time); stroke.angle += (n - 0.5) * 0.12; - // 呼吸感 - 更柔和 const breath = Math.sin(time * 1.5 + stroke.x * 0.01) * 0.25; const currentSpeed = stroke.speed * (1 + breath * 0.2); stroke.x += Math.cos(stroke.angle) * currentSpeed; stroke.y += Math.sin(stroke.angle) * currentSpeed; - // 笔触粗细 - 模拟提按 const progress = stroke.currentLength / stroke.maxLength; const weightVar = Math.sin(progress * Math.PI) * 1.0; const weight = Math.max(0.2, stroke.baseWeight + weightVar); @@ -143,16 +137,13 @@ function ZenBackground() { stroke.complete = true; } - // 绘制 - 水墨晕染效果 if (stroke.points.length > 1) { for (let i = 1; i < stroke.points.length; i++) { const p1 = stroke.points[i - 1]; const p2 = stroke.points[i]; - // 渐变透明度 const alpha = stroke.inkAlpha * (1 - i / stroke.points.length * 0.4) / 100; const size = p2.weight * random(0.8, 1.2); - // 绘制柔和的笔触 ctx.beginPath(); ctx.moveTo(p1.x, p1.y); ctx.lineTo(p2.x, p2.y); @@ -161,7 +152,6 @@ function ZenBackground() { ctx.lineCap = 'round'; ctx.stroke(); - // 添加淡淡的墨点晕染 if (random(0, 1) < 0.3) { ctx.beginPath(); ctx.arc(p2.x, p2.y, size * random(0.5, 1.5), 0, Math.PI * 2); @@ -172,12 +162,12 @@ function ZenBackground() { } } - // 绘制圆相(Ensō)- 缓慢呼吸 + // 绘制圆相(Ensō) const centerX = canvas.width / 2; const centerY = canvas.height / 2; const breathScale = 1 + Math.sin(time * 0.3) * 0.015; const radius = Math.min(canvas.width, canvas.height) * 0.18 * breathScale; - const gap = Math.PI * 0.18; // 开口 + const gap = Math.PI * 0.18; const startAngle = -Math.PI / 2 + time * 0.05; ctx.beginPath(); @@ -224,6 +214,40 @@ function ZenBackground() { ); } +// 功能特性卡片 +function FeatureCard({ + icon, + title, + description, +}: { + icon: string; + title: string; + description: string; +}) { + return ( + + + {icon} + + {title} + + + {description} + + + + ); +} + export function LandingPage() { const navigate = useNavigate(); @@ -285,75 +309,95 @@ export function LandingPage() { - + {/* Hero 区域 */} + {/* 产品图标 */}
掐日子
+ {/* 主标题 */} 掐日子 + {/* 副标题 - 增强可读性 */} AI 纪念日 · 提醒 + {/* 描述文案 */} 轻便、灵活的倒数日和提醒应用 @@ -361,57 +405,70 @@ export function LandingPage() { 让每一个重要的日子都被铭记 - + +
- - - - 纪念日 - - - - 提醒 - - - - AI - - - - 便签 - - -
+ {/* 功能介绍区域 */} + + + + + + + +
);