当前位置: 首页 > news >正文

Three.js + React 实战系列 - 项目展示区开发详解 Projects 组件(3D 模型 + 动效 + 状态切换)✨

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!!

在这一篇博客中,我们将搭建项目主页中极具互动性的 Projects 区域。

该组件承担着展示个人项目展示的功能,融合 GSAP 动画、@react-three/fiber 3D 展示与交互式切换等高级特性,用户体验上极具冲击力。

React + ThreeJS 个人主页小项目:🎥 05 · 项目展示区开发详解 Projects 组件(3D 模型 + 动效 + 状态切换)

✨ 组件亮点概览

  • 结合 GSAP 实现文字动画过渡效果;
  • 通过 <Canvas> 实现 3D 电脑模型展示;
  • 支持左右翻页浏览多个项目;
  • 响应式设计与美观的卡片式信息布局。

## 📁 项目结构建议

组件路径:

src/
├— components/
│   └— DemoComputer.jsx
├— sections/
│   └— Projects.jsx
└— constants/├— index.js

🔄 状态切换逻辑

我们定义了 selectedProjectIndex 来记录当前浏览的项目,通过 handleNavigation 来控制前后切换逻辑,形成一个循环浏览:

const handleNavigation = (direction) => {setSelectedProjectIndex((prevIndex) => {if (direction === 'previous') {return prevIndex === 0 ? projectCount - 1 : prevIndex - 1;} else {return prevIndex === projectCount - 1 ? 0 : prevIndex + 1;}});
};

🌟 动画效果(GSAP)

通过 useGSAP,我们对每次切换项目时的 .animatedText 类名文字应用淡入动画,增强用户体验:

useGSAP(() => {gsap.fromTo('.animatedText', { opacity: 0 }, {opacity: 1,duration: 1,stagger: 0.2,ease: 'power2.inOut'});
}, [selectedProjectIndex]);

fromTo 方法:初始状态将文字透明度设为 0,然后在 1 秒内逐个淡入(通过 stagger 实现),动画曲线为 power2.inOut,使文字的出现显得柔和流畅,极大提升了用户在浏览项目时的沉浸感和专业感。


🖼️ 左侧:项目信息面板

包括:项目封面图、logo、标题描述、标签、跳转链接,以及左右切换按钮。

<img src={currentProject.spotlight} alt="spotlight" className="..." />
<p className="text-white text-2xl font-semibold animatedText">{currentProject.title}</p>

所有数据来源于 myProjects 常量数组,并支持动态渲染每个项目对应的内容。


🖥️ 右侧:3D 电脑展示区域

采用 @react-three/fiber<Canvas> 实现沉浸式项目封面展示。

<Canvas><ambientLight intensity={Math.PI} /><directionalLight position={[10, 10, 5]} /><Center><Suspense fallback={<CanvasLoader />}><group scale={2} position={[0, -3, 0]} rotation={[0, -0.1, 0]}><DemoComputer texture={currentProject.texture} /></group></Suspense></Center><OrbitControls maxPolarAngle={Math.PI / 2} enableZoom={false} />
</Canvas>

其中 DemoComputer 是一个自定义 3D 模型组件,配合不同 texture 显示不同项目封面。

在这里插入图片描述


📌 总结

Projects.jsx 组件是整个主页中前后端交互最强、技术栈最丰富的板块之一,建议优先理清以下要点:

  • 熟练使用 state 管理当前展示内容;
  • 理解如何配合 GSAP 动画提升 UX;
  • 熟悉 Fiber Canvas 与 Drei 工具的用法;
  • 数据抽象与复用能力的提升。

🔠 下一篇预告:客户评价区域

我们将在下一节中:

  • 🌟 构建客户评价区域(Client)
  • ✨ 使用 gsap 为内容添加滑入动效
  • ⛳️ 信息条目数据化驱动,方便扩展

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!!
我们下一节见!👋

http://www.xdnf.cn/news/285841.html

相关文章:

  • android-ndk开发(2): macOS 安装 ndk
  • PyTorch_自动微分模块
  • 时间同步服务核心知识笔记:原理、配置与故障排除
  • 因为gromacs必须安装cuda(系统自带的NVIDIA驱动不行),这里介绍下如何安装cuda
  • 学习路线(机器人软件架构)
  • Java常用注解大全(基于JDK17+SpringBoot3)
  • 对ubuntu的简单介绍
  • Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
  • 题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置
  • SpringMVC 框架核心知识点详解与实战
  • 精益数据分析(41/126):深入解读移动应用商业模式的关键指标与策略
  • linux 高并发 文件句柄数 fs 及 tcp端口数调优
  • 泉州2025年首次网签备案登记的商品住宅并在本年度进行装修、改造及家装物品和材料购置的,在上述补贴额度的基础上上浮2万元,单个产权人补贴最高不超过5万元。
  • VScode中关于Copilot的骚操作
  • ByteArrayOutputStream 类详解
  • 基于yolov11的打电话玩手机检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • 一文说清-什么是强化学习
  • zst-2001 历年真题 程序设计语言
  • 代码随想录算法训练营 Day37 动态规划Ⅴ 完全背包 零钱兑换
  • 【Java ee初阶】多线程(7)
  • C++负载均衡远程调用学习之获取主机信息功能
  • Redis 中简单动态字符串(SDS)的深入解析
  • Vue项目安全实践指南:从输入验证到状态管理的全方位防护
  • 利用WPS创建的Templates目录,快捷生成md文件
  • 【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)
  • E-R图作业
  • lambda表达式和方法引用
  • 【Linux】网络基础
  • Python内置函数
  • python打卡day16