一个具有苹果风格高级动画效果的工业吸尘器着陆页,使用 Next.js 15, React 18, Tailwind CSS, Framer Motion 和 shadcn/ui 构建。
- ✅ 极简主义设计语言
- ✅ 大胆的排版和留白
- ✅ 流畅的动画和过渡效果
- ✅ 玻璃态(Glassmorphism)效果
- ✅ 渐变和光影效果
- ✅ Hero部分滚动动画 - 视差效果和鼠标追踪
- ✅ 数字动态计数器 - 滚动到视图时自动计数
- ✅ 悬停状态动画 - 按钮悬停时的缩放、发光、渐变扫描效果
- ✅ 淡入视图动画 - 元素进入视口时的淡入效果
- ✅ 视差滚动 - 多层深度滚动效果
- ✅ 鼠标追踪 - 背景元素跟随鼠标移动
- ✅ 页面进度条 - 顶部滚动进度指示器
- ✅ 浮动元素 - 持续的浮动动画
- ✅ 磁性按钮效果 - 鼠标接近时的吸附效果
- ✅ 错开动画 - 多个元素按顺序出现
-
按钮动画
- 悬停时的缩放和上移效果
- 渐变扫描动画(shimmer effect)
- 阴影发光效果
- 旋转和倾斜过渡
-
卡片效果
- 3D悬停倾斜
- 阴影和模糊变化
- 边框渐变动画
- 平滑的内容过渡
-
滚动动画
- 视差背景
- 元素淡入淡出
- 滚动触发的动画序列
- 平滑滚动指示器
-
微交互
- 图标旋转和缩放
- 加载状态动画
- 悬停反馈
- 点击波纹效果
- Next.js 15 - React框架,支持SSR和静态生成
- React 18 - 最新版本的React
- TypeScript - 类型安全
- Tailwind CSS 3.4 - 实用优先的CSS框架
- Framer Motion 11 - 强大的React动画库
- shadcn/ui - 高质量的React组件
- Lucide React - 精美的图标库
- 完全响应式布局
- 移动优先方法
- 跨浏览器兼容
- 完整的Meta标签
- Open Graph标签
- Twitter Card标签
- JSON-LD结构化数据
- 语义化HTML5
- Node.js 18.0 或更高版本
- npm 或 yarn
- 克隆仓库
cd TEST-LANDING-PAGE- 安装依赖
npm install
# 或
yarn install- 运行开发服务器
npm run dev
# 或
yarn dev- 打开浏览器访问 http://localhost:3000
npm run build
npm run start
# 或
yarn build
yarn startTEST-LANDING-PAGE/
├── app/
│ ├── globals.css # 全局样式和自定义动画
│ ├── layout.tsx # 根布局和SEO配置
│ └── page.tsx # 主页面组件(所有动画效果)
├── components/
│ └── ui/
│ └── button.tsx # Premium按钮组件
├── lib/
│ └── utils.ts # 工具函数
├── next.config.js # Next.js配置
├── tailwind.config.ts # Tailwind配置和自定义动画
├── tsconfig.json # TypeScript配置
└── package.json # 项目依赖
# 旧版本(HTML静态页面)
├── index.html # 原始版本
├── index-seo-optimized.html # SEO优化版本
└── SEO-COMPARISON.md # SEO对比文档
// 鼠标追踪效果
const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 })
// 浮动圆球跟随鼠标
<motion.div
animate={{
x: mousePosition.x * 0.02,
y: mousePosition.y * 0.02,
}}
/>// 滚动进度条
const { scrollYProgress } = useScroll()
const scaleX = useSpring(scrollYProgress)
// 视差效果
const y = useTransform(scrollYProgress, [0, 1], [100, -100])// 元素进入视口时淡入
const isInView = useInView(ref, { once: true })
<motion.div
initial={{ opacity: 0, y: 50 }}
animate={isInView ? { opacity: 1, y: 0 } : {}}
/>// 卡片悬停动画
<motion.div
whileHover={{ scale: 1.05, y: -10 }}
transition={{ type: "spring", stiffness: 300 }}
/>| 特性 | 静态HTML版本 | Next.js Premium版本 |
|---|---|---|
| 框架 | 纯HTML/CSS/JS | Next.js + React |
| 动画库 | CSS动画 | Framer Motion |
| 组件化 | 无 | ✅ 完全组件化 |
| 类型安全 | 无 | ✅ TypeScript |
| 悬停动画 | 基础CSS | ✅ 高级物理动画 |
| 滚动效果 | 基础 | ✅ 视差 + 进度条 |
| 鼠标交互 | 无 | ✅ 鼠标追踪 |
| 动态计数 | 无 | ✅ 滚动触发计数 |
| 性能 | 好 | ✅ 优秀(React 18) |
| SEO | ✅ 完整 | ✅ 完整 + 动态 |
- 按钮上的光线扫过效果
- 文字渐变动画
- 实现方式:
translateX+gradient
- 半透明背景
- 模糊效果(backdrop-filter: blur)
- 微妙的边框
- 元素持续上下浮动
- 使用缓动函数实现自然效果
- 不同层级以不同速度移动
- 创造深度感
- 按钮对鼠标的吸引效果
- 悬停时的缩放和移动
- 悬停时的外发光
- 脉冲式的光晕动画
- 卡片的3D倾斜
- 鼠标位置响应的旋转
- 多个元素依次出现
- 创造流畅的序列感
- 自然的弹跳效果
- Framer Motion的spring动画
- 元素进入视口时触发
- 滚动进度条
- 动态计数器
在 globals.css 中定义的自定义动画:
/* 浮动 */
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
/* 发光 */
@keyframes glow {
0%, 100% { box-shadow: 0 0 20px rgba(59, 130, 246, 0.5); }
50% { box-shadow: 0 0 40px rgba(59, 130, 246, 0.8); }
}
/* 渐变移动 */
@keyframes gradient-shift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}-
Framer Motion优化
- 使用
will-change属性 - 硬件加速(transform, opacity)
- 懒加载非首屏动画
- 使用
-
React优化
- 使用
useRef避免不必要的重渲染 once: true只触发一次动画- 条件渲染减少DOM节点
- 使用
-
Tailwind优化
- JIT模式(Just-in-Time)
- 仅生成使用的CSS
- 生产环境自动purge
- Lighthouse Performance: 90+
- 首次内容绘制 (FCP): < 1.5s
- 最大内容绘制 (LCP): < 2.5s
- 累积布局偏移 (CLS): < 0.1
- 首次输入延迟 (FID): < 100ms
npm run dev热重载开发,实时查看修改效果
npm run build
npm run start优化的生产构建,最佳性能
-
极致的用户体验
- 流畅的60fps动画
- 响应式的微交互
- 自然的物理效果
-
专业的视觉设计
- 苹果风格的设计语言
- 一致的视觉层次
- 精心设计的颜色和间距
-
可维护的代码
- TypeScript类型安全
- 组件化架构
- 清晰的代码注释
-
优秀的SEO
- 完整的meta标签
- 结构化数据
- 语义化HTML
npm install -g vercel
vercel- Netlify
- AWS Amplify
- GitHub Pages(需要导出静态文件)
ISC
- Next.js
- Framer Motion
- Tailwind CSS
- shadcn/ui
- Apple - 设计灵感来源
注意: 这是一个演示项目,展示了如何使用现代Web技术创建苹果风格的高级动画效果。