基于 Three.js 与 React Three Fiber 的 3D 无限滚动画廊
YYC3-Infinite-Gallery — Next.js 作品集模板
作者 YYC-Cube
基于 Next.js 与 Three.js 的 3D 无限滚动画廊模板,用于摄影师、艺术家和设计师展示作品,支持多种布局与交互配置。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
目前有 1 张原始预览,可打开完整图片查看设计细节。
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
提供 Grid、Random、Spiral 三种布局模式
支持键盘、触摸、鼠标滚轮及自动播放等交互配置
包含 PWA 安装与离线访问能力
附带 API、开发、部署、PWA 等文档
MIT 许可,代码可免费使用、修改和分发
模板详细介绍
YYC3-Infinite-Gallery 是一个面向作品展示的 Next.js 模板,核心是使用 Three.js 与 React Three Fiber 渲染的 3D 无限滚动画廊。它提供 Grid、Random、Spiral 三种布局模式,并可通过 GalleryOptions 配置缩放、滚动、自动播放、键盘与触摸交互、背景色、图片尺寸、间距、阴影和反射等参数。模板包含 InfiniteGallery 组件,接收图片数组和回调,适合直接嵌入页面使用。
项目附带 API、开发、部署和 PWA 文档,支持静态导出,并提供 GitHub Pages 自动部署配置。PWA 部分支持安装到桌面或主屏幕以及离线访问。仓库采用 MIT 许可证,代码可免费使用、修改和分发,但演示图片、字体、图标等第三方素材需单独核对许可。
需要注意,README 中列出的性能指标、Lighthouse 分数和具体框架版本号来自项目自述,未在本次整理中独立验证;实际表现取决于使用环境与配置。
适合你的项目吗?
适用场景
- 摄影师个人作品集网站
- 艺术家或设计师的 3D 作品展示页
- 需要沉浸式图片浏览体验的展示型页面
- 希望以静态导出方式部署到 GitHub Pages 的作品集项目
适合人群
- 使用 Next.js 的开发者
- 需要 3D 画廊展示作品的摄影师或艺术家
- 希望快速搭建作品集并支持 PWA 的个人用户
- 接受 MIT 许可并自行核对第三方素材授权的使用者
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
环境要求 Node.js ≥ 18.0.0,推荐使用 pnpm ≥ 8.0.0
- 2
克隆仓库后执行 pnpm install,再用 pnpm dev 启动开发服务器
- 3
生产构建使用 pnpm build,可静态导出
- 4
GitHub Pages 部署已配置,推送 main 分支后由 Actions 自动构建
- 5
演示图片、字体、图标等第三方素材需按各自许可单独核对
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 可选集成 Google Analytics,需自行提供 GA 跟踪 ID 并遵守 Google 服务条款,非模板运行必需。
- 可选集成 Sentry 错误监控,需自行注册账号并提供 DSN,属外部服务,非模板运行必需。
- 动态 API 场景推荐部署到 Vercel,使用其托管服务需遵守 Vercel 条款,可能涉及账号与费用。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # 可选:Google Analytics
README 原文
NEXT_PUBLIC_SENTRY_DSN=https://... # 可选:错误监控
README 原文
https://github.com/YYC-Cube/YYC3-Infinite-Gallery/blob/main/LICENSEhttps://github.com/YYC-Cube/YYC3-Infinite-Gallery/blob/main/README.mdVercel(推荐用于动态 API)
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-01。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 80 / 100
- 技术栈
- Next.js · React
- 网站类型
- 作品集
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-07-28
- 截图检查日期
- 2026-10-01
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。
查看当时使用的来源资料
SHA-256: 1222f6b4b42e3d3310cbb59108f9bc03c3eb8effd5076bddc0b79ec942b52e49
2026-10-01T15:37:19.093Z
来源文件 / 仓库# 🎨 YYC3 Infinite Gallery
<p align="center">
<img src="public/D-1998.png" alt="YYC3 3D Gallery Preview" width="100%" />
</p>
<p align="center">
<strong>基于 Next.js × Three.js 构建的高性能 3D 无限滚动画廊展示系统</strong>
</p>
<p align="center">
<a href="https://gallery.yyc3.top" target="_blank">🌐 在线演示</a> ·
<a href="#-快速开始">🚀 快速开始</a> ·
<a href="#-核心特性">✨ 核心特性</a> ·
<a href="docs/api.md">📖 API 文档</a> ·
<a href="#-贡献">🤝 贡献</a>
</p>
---
## 📊 项目状态
<p align="center">
<img src="https://img.shields.io/badge/version-2.0.0-blue?style=for-the-badge" />
<img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" />
<img src="https://img.shields.io/github/actions/workflow/status/YYC-Cube/YYC3-Infinite-Gallery/deploy.yml?branch=main&style=for-the-badge" />
<img src="https://img.shields.io/badge/PWA-Ready-purple?style=for-the-badge&logo=pwa" />
<img src="https://img.shields.io/badge/lighthouse-100-brightgreen?style=for-the-badge" />
</p>
<p align="center">
<img src="https://img.shields.io/codefactor/grade/github/YYC-Cube/YYC3-Infinite-Gallery?style=for-the-badge" />
<img src="https://img.shields.io/badge/TypeScript-5.7.0-3178C6?style=for-the-badge&logo=typescript" />
<img src="https://img.shields.io/badge/React-19.2.7-61DAFB?style=for-the-badge&logo=react" />
<img src="https://img.shields.io/badge/Next.js-16.2.10-black?style=for-the-badge&logo=next.js" />
<img src="https://img.shields.io/badge/Three.js-0.185.1-000000?style=for-the-badge&logo=three.js" />
</p>
---
## 📦 技术栈
| 技术 | 版本 | 描述 |
|------|------|------|
| [Next.js](https://nextjs.org/) | 16.2.10 | React 应用框架(Turbopack) |
| [React](https://react.dev/) | 19.2.7 | UI 库 |
| [TypeScript](https://www.typescriptlang.org/) | 5.7.0 | 类型安全 |
| [Three.js](https://threejs.org/) | 0.185.1 | 3D 图形引擎 |
| [React Three Fiber](https://docs.pmnd.rs/react-three-fiber) | 9.6.1 | React 3D 渲染器 |
| [Drei](https://github.com/pmndrs/drei) | 10.7.7 | 3D 辅助组件库 |
| [Tailwind CSS](https://tailwindcss.com/) | 4.0.0 | 原子化 CSS 框架 |
---
## ✨ 核心特性
### 🎯 3D 无限滚动
- **WebGL 高性能渲染** — 基于 Three.js + React Three Fiber,60fps 流畅体验
- **无限内容加载** — 滚动到底部自动加载更多内容
- **智能布局算法** — Grid / Random / Spiral 三种布局模式,自动优化排列
### 📱 全设备支持
- **响应式设计** — 桌面端 / 平板 / 手机完美适配
- **触摸优化** — 移动端手势交互精心调校
- **PWA 安装** — 可安装为桌面 / 主屏幕应用,支持离线访问
### 🎨 视觉效果
- **沉浸式 3D** — 动态光照、智能阴影、平滑过渡动画
- **反射效果** — 可选地面反射,提升视觉层次
- **后期处理** — Bloom、景深等后处理效果(可选)
### ⚡ 性能优化
- **Turbopack 构建** — 开发 / 生产构建极速体验
- **懒加载** — 图片和资源按需加载,减少首屏时间
- **代码分割** — 自动路由级代码分割
- **WebGL 降级** — 自动检测并降级到 2D 模式
- **图片优化** — 支持 WebP/AVIF 格式,响应式图片
---
## 🚀 快速开始
### 环境要求
| 依赖 | 最低版本 |
|------|----------|
| Node.js | ≥ 18.0.0 |
| pnpm | ≥ 8.0.0(推荐) |
### 安装 & 启动
```bash
# 克隆项目
git clone https://github.com/YYC-Cube/YYC3-Infinite-Gallery.git
cd YYC3-Infinite-Gallery
# 安装依赖(推荐 pnpm)
pnpm install
# 启动开发服务器(Turbopack 加速)
pnpm dev
# → http://localhost:3000
```
### 可用脚本
```bash
pnpm dev # 启动开发服务器(Turbopack)
pnpm build # 构建生产版本(静态导出)
pnpm start # 本地预览生产版本
pnpm lint # ESLint 代码检查
pnpm lint:fix # 自动修复 Lint 问题
pnpm typecheck # TypeScript 类型检查
pnpm test # 运行测试
pnpm test:watch # 监听模式运行测试
pnpm format # 代码格式化(Prettier)
pnpm analyze # 构建分析(Bundle Size)
pnpm audit # 依赖安全审计
pnpm update-deps # 交互式更新依赖
```
---
## 📖 文档导航
| 文档 | 描述 |
|------|------|
| [API 参考](docs/api.md) | 组件 Props、类型定义、Hook 接口 |
| [开发指南](docs/development.md) | 环境设置、代码规范、调试技巧 |
| [部署指南](docs/deployment.md) | GitHub Pages / Vercel / Docker 部署 |
| [PWA 指南](docs/pwa.md) | Manifest / Service Worker / 离线支持 |
| [贡献指南](CONTRIBUTING.md) | Fork 流程、Commit 规范、PR 模板 |
> 📗 **英文文档**: [View English Documentation](README.en.md)
---
## 🎮 使用指南
### 基本用法
```tsx
import InfiniteGallery from '@/components/InfiniteGallery';
export default function Home() {
const images = [
{ id: '1', src: '/photos/1.webp', alt: 'Photo 1', title: '作品 1' },
{ id: '2', src: '/photos/2.webp', alt: 'Photo 2', title: '作品 2' },
// ... 更多图片
];
return (
<InfiniteGallery
images={images}
options={{
initialZoom: 1,
autoPlay: false,
enableKeyboard: true,
enableTouch: true,
}}
onImageClick={(image) => console.log('Clicked:', image)}
/>
);
}
```
### 配置选项
```typescript
interface GalleryOptions {
// 缩放配置
initialZoom?: number; // 初始缩放级别(默认: 1)
zoomSensitivity?: number; // 缩放敏感度(默认: 0.1)
// 滚动配置
scrollSensitivity?: number; // 滚动敏感度(默认: 1)
rotationSensitivity?: number; // 旋转敏感度(默认: 0.01)
// 自动播放
autoPlay?: boolean; // 自动播放(默认: false)
autoPlaySpeed?: number; // 自动播放速度(默认: 1)
// 交互控制
enableKeyboard?: boolean; // 启用键盘控制(默认: true)
enableTouch?: boolean; // 启用触摸控制(默认: true)
enableMouseWheel?: boolean; // 启用鼠标滚轮(默认: true)
// 视觉配置
backgroundColor?: string; // 背景颜色(默认: '#000000')
imageSize?: number; // 图片初始大小(默认: 300)
spacing?: number; // 图片间距(默认: 50)
layout?: 'grid' | 'random' | 'spiral'; // 布局模式(默认: 'grid')
depth?: number; // 3D 深度效果(默认: 10)
shadows?: boolean; // 启用阴影(默认: true)
reflection?: boolean; // 启用反射(默认: false)
}
```
### 键盘快捷键
| 快捷键 | 功能 |
|--------|------|
| `↑` `↓` `←` `→` | 滚动 / 导航 |
| `+` / `=` | 放大 |
| `-` / `_` | 缩小 |
| `0` | 重置缩放 |
| `Space` | 暂停 / 播放自动轮播 |
| `F` | 全屏切换 |
| `Esc` | 退出全屏 |
---
## 📱 PWA 功能
### 安装为应用
1. **桌面端**: 点击浏览器地址栏的"安装"图标
2. **移动端**: 在浏览器菜单中选择"添加到主屏幕"
3. **离线使用**: 安装后支持离线访问缓存内容
### PWA 特性
- ✅ **离线支持** — Service Worker 缓存策略
- ✅ **应用壳** — 快速加载的应用壳架构
- ✅ **后台同步** — 网络恢复后自动同步
- ✅ **全屏模式** — 沉浸式全屏体验
- ✅ **自动更新** — 新版本检测并提示更新
---
## ⚡ 性能优化
### 最佳实践
1. **图片优化**
- 使用 WebP/AVIF 格式
- 实施响应式图片(`sizes` + `srcset`)
- 启用懒加载(Intersection Observer)
2. **代码优化**
- 使用 `React.memo` 避免不必要的重渲染
- 实施代码分割(动态 `import()`)
- 优化打包体积(Tree Shaking)
3. **渲染优化**
- 使用 Canvas 外的 DOM 叠加层
- 实施视锥体剔除(Frustum Culling)
- 优化 3D 模型复杂度(LOD)
### 性能指标
| 指标 | 目标 | 实际 |
|------|------|------|
| Lighthouse Performance | > 90 | ✅ 95+ |
| First Contentful Paint | < 1.5s | ✅ ~1.2s |
| Time to Interactive | < 3.5s | ✅ ~2.8s |
| Core Web Vitals | Good | ✅ Good |
---
## 🌍 部署
### GitHub Pages(已配置 🟢)
推送到 `main` 分支后,GitHub Actions 自动构建并部署:
```bash
git push origin main
# → 等待 ~2 分钟
# → 访问 https://gallery.yyc3.top
```
### Vercel(推荐用于动态 API)
```bash
pnpm add -D vercel
vercel deploy
```
### 环境变量
```bash
# .env.production
NEXT_PUBLIC_SITE_URL=https://gallery.yyc3.top
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # 可选:Google Analytics
NEXT_PUBLIC_SENTRY_DSN=https://... # 可选:错误监控
```
---
## 🤝 贡献
欢迎任何形式的贡献!请先阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。
```bash
# 1. Fork 项目
# 2. 创建功能分支
git checkout -b feat/your-feature
# 3. 提交(遵循 Conventional Commits)
git commit -m "feat: add spiral layout"
# 4. 推送并创建 PR
git push origin feat/your-feature
```
### 代码规范
- **提交信息**: 遵循 [Conventional Commits](https://www.conventionalcommits.org/)
- **代码风格**: ESLint + Prettier(自动格式化)
- **类型安全**: TypeScript 严格模式,完整类型定义
---
## 🐛 问题反馈
### 报告 Bug
请使用 [GitHub Issues](https://github.com/YYC-Cube/YYC3-Infinite-Gallery/issues) 报告问题:
1. **描述问题** — 清晰描述遇到的问题
2. **复现步骤** — 提供复现问题的详细步骤
3. **预期行为** — 描述期望的正确行为
4. **截图** — 如果可能,提供截图或录像
5. **环境信息** — 浏览器、操作系统、设备信息
### 功能请求
我们欢迎新功能建议!请在 Issues 中使用 "Feature Request" 标签。
---
## 📄 许可证
[MIT License](LICENSE) — 可自由使用、修改和分发。
---
## 🙏 致谢
- [Next.js](https://nextjs.org/) — React 应用框架
- [Three.js](https://threejs.org/) — 3D 图形引擎
- [React Three Fiber](https://docs.pmnd.rs/react-three-fiber) — React 3D 渲染器
- [Tailwind CSS](https://tailwindcss.com/) — 原子化 CSS 框架
- [Vercel](https://vercel.com/) — 部署平台
---
## 📧 联系我们
- **项目作者**: YYC³
- **官方网站**: [https://yyc3.top](https://yyc3.top)
- **项目演示**: [https://gallery.yyc3.top](https://gallery.yyc3.top)
- **GitHub**: [@yyc3](https://github.com/yyc3)
- **邮箱**: [email protected]
---
## 📊 项目统计
<p align="center">
<img src="https://img.shields.io/github/stars/YYC-Cube/YYC3-Infinite-Gallery?style=social" />
<img src="https://img.shields.io/github/forks/YYC-Cube/YYC3-Infinite-Gallery?style=social" />
<img src="https://img.shields.io/github/watchers/YYC-Cube/YYC3-Infinite-Gallery?style=social" />
<img src="https://img.shields.io/github/contributors/YYC-Cube/YYC3-Infinite-Gallery" />
<img src="https://img.shields.io/github/last-commit/YYC-Cube/YYC3-Infinite-Gallery" />
</p>
---
<p align="center">
<strong>🌹 感谢使用 YYC3 Infinite Gallery!</strong>
</p>
<p align="center">
我们致力于提供最佳的 3D 内容展示体验。
</p>
<p align="center">
Built with ❤️ by <a href="https://yyc3.top">YYC³</a> ·
<a href="https://github.com/YYC-Cube/YYC3-Infinite-Gallery">GitHub</a> ·
<a href="https://gallery.yyc3.top">Live Demo</a>
</p>
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

react-resume-template
A personal resume website template built with React.js, Typescript, Next.js, and styled with Tailwind css
Next.js · 作品集

nxt-lnk
Custom bio links for creatives who love coding. A perfect custom alternative for linktree, bio and other short…
Next.js · 作品集

sylph
A minimal portfolio template.
Next.js · 作品集

sleek-portfolio
sleek-portfolio 是一个面向开发者个人品牌展示的现代作品集模板,基于 Next.js 15、TypeScript、Tailwind CSS 和 Shadcn UI 构建。
Next.js · 作品集

research-website-template
React + Next.js template for research websites (for PhD students, researchers, etc)
Next.js · 作品集

shadcn-portfolio
shadcn-portfolio 是一个面向开发者的作品集模板,技术栈为 Next.js 15、shadcn/ui、Tailwind CSS 和 Framer Motion。
Next.js · 作品集
