No description
- JavaScript 43.9%
- TypeScript 37.1%
- CSS 18.2%
- SCSS 0.5%
- Shell 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .vscode | ||
| node 转像素 获取index | ||
| public | ||
| src | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| eslint.config.mjs | ||
| next.config.js | ||
| package.json | ||
| pnpm-lock.yaml | ||
| postcss.config.mjs | ||
| README.md | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
DXD Studio
DXD studio(2019 年成立于深圳的设计与创新工作室)官网,品牌设计 / 视觉识别 / 产品包装及摄影展示。 首页是一块可交互的 3D Logo Banner(React Three Fiber + GSAP),点击 Logo 会触发旋转 / 缩放 / 位移动画,相机自动跟随。
截图为本地
pnpm dev实拍。开发模式下页面右上角会叠加r3f-perf性能面板、左下角有 Next.js 开发指示器,截图时已将其隐藏;生产构建没有左下角指示器。
路由一览
| 路由 | 说明 | 源码 |
|---|---|---|
/ |
首页:3D DXD Logo Banner(Banner + Banner_Scene + LogoModel) |
src/app/page.tsx:116 |
/work |
作品列表(同样复用了 3D Banner) | src/app/work/page.tsx:3 |
/work/[work_id] |
作品详情:WorkInfo + HolyMoly 画廊 |
src/app/work/[work_id]/page.tsx:10 |
/team |
团队页(含 @auth 拦截路由插槽) |
src/app/team/page.tsx:3 |
/famliy |
家庭页(含 @ana / @team 并行路由插槽) |
src/app/famliy/page.tsx:2 |
/login |
登录页(占位) | src/app/login/page.tsx:1 |
/api/hello |
健康检查:GET 返回 { message: 'world' } |
src/app/api/hello/route.ts:3 |
/api/shopify |
Shopify Admin API 调试验尸:GET 查询店铺名称 |
src/app/api/shopify/route.ts:28 |
技术栈
- 框架:Next.js 15(App Router)+ React 19 + TypeScript
- 3D:
three、@react-three/fiber、@react-three/drei、@react-three/postprocessing、camera-controls(fitToBox跟随鼠标)、maath - 动效:GSAP(含 ScrollTrigger)、
motion - 状态:
zustand(useDxdStore:相机、Logo 网格、点击计数、isTestMode等,见src/store/DxdStore.js:4) - UI:Radix Themes / Radix UI、
tailwindcss、next-themes(明暗切换)、next-view-transitions、lucide-react、swiper - 调试:
leva(场景参数面板)、r3f-perf(性能 HUD,默认常驻显示) - 其他:Shopify Admin API client(仅调试路由使用)
快速开始
环境要求:Node.js 20+、pnpm 10+。
pnpm install
pnpm dev # http://localhost:3000
构建与生产运行:
pnpm build
pnpm start # http://localhost:3000
pnpm lint
项目结构
src/
app/ # App Router:page / layout / template / api
page.tsx # 首页(3D Banner)
work/ # 作品列表 + [work_id] 详情
team/ # 团队页(@auth 并行路由)
famliy/ # 家庭页(@ana / @team 并行路由)
login/ # 登录页占位
api/hello|shopify # API 路由
components/
canvas/ # 3D 相关:Banner / Banner_Scene / LogoModel / CameraContral / Lights
Logo/ # CircleLogo 等品牌组件
Header.tsx # 顶部导航(Home + 明暗切换)
work/ # HolyMoly / WorkInfo(作品详情组件)
store/ # zustand:DxdStore / ThreeStore / animeStore / prePath
hooks/ utils/ helpers/
public/
three/model/ # 3D 模型(首页 Logo 用 `new4.glb`,见 LogoModel)
image/ # 站内图片素材
screenshots/home.png # README 首页截图
node 转像素 获取index/ # 像素转 index 小工具(独立目录,与主站无关)
3D Banner 说明
- 入口:
src/components/canvas/Banner.jsx:35创建<Canvas>,场景组装在src/components/canvas/Banner_Scene.jsx:20(灯光Lights+LogoModel+CameraRig)。 - 模型:
LogoModel加载/three/model/new4.glb(src/components/canvas/LogoModel.jsx:46), 点击 Logo 按clickTimes % 3循环播放三段 GSAP 动画,结束后调用fitToBox()让相机回正跟随鼠标。 - 移动端(
< 768px)走竖排旋转动画分支,见LogoModel.jsx:63/Banner_Scene.jsx:28。 - 调试开关:
useDxdStore提供isTestMode/toggleIsTestMode(src/store/DxdStore.js:31), 测试模式下放开相机鼠标 / 触摸控制(CameraContral.jsx:244)。注意<Perf>性能面板目前是无条件渲染的, 上线前如需隐藏请自行按isTestMode包一层。
多远端同步推送(可选)
本仓库常用 GitHub(origin)与自建 Forgejo(ayue)双远端。一次推两边的本地配置:
git remote add ayue 'ssh://git@git.ayue.cc:222/ayue/3d-dxd.git'
git remote set-url --add --push origin git@github.com:AhaYue/dxd.git
git remote set-url --add --push origin 'ssh://git@git.ayue.cc:222/ayue/3d-dxd.git'
git branch --set-upstream-to=origin/main main
之后 git push 即同时推送两个远端,git pull 仍从 origin 拉取。
注意:git remote 只保存在本地 .git/config,不会随推送同步,新机器 clone 后需重新执行一次。
注意事项
src/app/api/shopify/route.ts目前硬编码了 Shopify API Key / Secret / Admin Token, 且GET会把它们原样返回。切勿在生产环境暴露该路由,建议尽快迁移到环境变量并做访问控制。next.config.js接近默认配置;famliy、HollyMoly等命名为历史拼写,改动成本较高故保持原样。
