发布时间:2026/8/25 9:40:27
framer-motion动画技巧全解析:nextjs-portfolio中variants、useInView与交错入场的完整指南 framer-motion动画技巧全解析nextjs-portfolio中variants、useInView与交错入场的完整指南【免费下载链接】nextjs-portfolioportfolio website in nextjs 13项目地址: https://gitcode.com/gh_mirrors/ne/nextjs-portfolionextjs-portfolio是一个用 Next.js 13 Tailwind CSS 打造的高颜值个人作品集网站。它最大的亮点就是用framer-motion这套 React 动画库让页面拥有了丝滑的缩放入场、滚动触发和卡片交错入场效果。本文带你完整拆解其中 3 个核心技巧variants 动画状态、useInView 视口检测与交错入场Stagger效果零基础也能看懂 快速上手如何安装 framer-motion 动画想在自己的 Next.js 项目里复刻这套动效只需一步npm install framer-motion在 package.json 中可以看到本项目使用的版本是framer-motion^10.16.1。安装完成后把普通标签换成motion提供的组件如motion.div、motion.li动画能力就自动解锁了。 小贴士使用motion组件的文件顶部记得加use client因为动画依赖浏览器环境。 技巧一用 variants 定义可复用的动画状态variants变体是 framer-motion 的核心概念把从哪来、到哪去的动画状态写成一份配置组件只需要切换状态名即可。HeroSection缩放淡入的经典写法在 src/app/components/HeroSection.jsx 中首屏的文字和人物图都用motion.div包裹initial{{ opacity: 0, scale: 0.5 }} animate{{ opacity: 1, scale: 1 }} transition{{ duration: 0.5 }}意思是初始透明且缩小到 50%入场时恢复为完全不透明、正常大小整个过程 0.5 秒——一个轻盈的弹出效果。TabButton切换按钮下的动态下划线更妙的是 src/app/components/TabButton.jsx。这里把 variants 真正用出了状态机的味道const variants { default: { width: 0 }, active: { width: calc(100% - 0.75rem) }, };default状态下下划线宽度为 0看不见切换到active时宽度平滑展开到几乎整行按钮下方那条会生长出来的紫色下划线就这么诞生了 技巧二useInView 让动画只在滚动到视图时播放如果所有元素在页面加载时就动完了用户滚动时反而看不到任何效果。useInView就是解决这个问题的钩子判断元素是否进入浏览器视口。在 src/app/components/ProjectsSection.jsx 中const ref useRef(null); const isInView useInView(ref, { once: true }); // ... ul ref{ref} motion.li animate{isInView ? animate : initial}三个关键点要点说明useRef(null)创建一个引用稍后绑定到ul上useInView(ref, { once: true })监听该元素是否进入视口once: true表示只触发一次避免来回滚动反复播放animate{isInView ? animate : initial}在视口内播放animate状态否则保持initial✨ 技巧三交错入场——让卡片依次排队登场项目列表区域是全文最出彩的动效6 张项目卡片不是同时出现而是像多米诺骨牌一样依次上浮入场。这靠的就是交错延迟Stagger Delay。在 src/app/components/ProjectsSection.jsx 中const cardVariants { initial: { y: 50, opacity: 0 }, // 初始下沉50px且透明 animate: { y: 0, opacity: 1 }, // 入场回到原位并显形 }; // 渲染时 transition{{ duration: 0.3, delay: index * 0.4 }}delay: index * 0.4是灵魂所在第 1 张卡片延迟 0 秒第 2 张延迟 0.4 秒第 3 张延迟 0.8 秒……每张都晚一点出场形成流畅的波浪节奏 framer-motion 动画参数速查表参数作用本项目中的例子opacity透明度0 透明 → 1 不透明淡入淡出scale缩放比例Hero 区 0.5 → 1 放大登场x/y水平 / 垂直位移卡片从下方 50px 处上浮duration动画时长秒0.3s / 0.5sdelay延迟启动秒交错入场的关键width宽度Tab 下划线生长效果 新手常见问题Qvariants 和直接写initial/animate有什么区别A直接写适合一次性动画variants 把状态命名成对象方便在多个animate值之间切换如 TabButton 的active/default也便于父组件统一编排子动画。Q为什么useInView要加once: trueA不加的话每次滚出再滚回视口都会重播动画容易让用户感到页面在抽搐加once: true后只播一次体验更从容。Q交错延迟设多大合适A经验值是 0.1s ~ 0.5s 起步。延迟太大如每张 1s 以上后面的卡片要等很久才出现太小则交错感不明显。✅ 总结nextjs-portfolio 用不到 10 行核心动画代码就为静态页面注入了生命力variants—— 把动画状态写成可复用的配置Hero 缩放入场与 Tab 下划线都靠它useInView—— 滚动到哪儿、动画播到哪儿once: true避免重复触发交错入场——delay: index * 0.4一行代码让项目卡片依次排队登场。照着这三个技巧你的下一个 Next.js 项目也能拥有同样高级的动效 ✨【免费下载链接】nextjs-portfolioportfolio website in nextjs 13项目地址: https://gitcode.com/gh_mirrors/ne/nextjs-portfolio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/25 9:35:27

大模型面试核心技术与实战指南

1. 大模型面试知识体系概览大模型技术作为当前AI领域最炙手可热的方向,其知识体系已经形成了相对完整的框架。从面试准备的角度来看,我们需要掌握的核心内容包括模型架构、训练方法、微调技术、部署方案以及应用开发等多个维度。这些知识点不仅是大厂面试…

2026/8/25 9:35:27

C++ vector实现任意长度数组的原理与实战

1. 项目概述:为什么“用vector实现任意长度数组”是C新手绕不开的第一道真题刚学完C语言数组的同学,第一次写C程序时常常卡在同一个地方:输入一串数字,个数不确定,怎么存?用int a[1000]?万一用户…

2026/8/25 12:06:07

单例模式深度解析:从线程安全到Spring框架实战

单例模式,可能是你面试时被问得最多、工作中用得最广,但也是最容易被“用错”的设计模式。很多人以为单例就是“一个类只能有一个实例”,然后随手写个private static变量就完事了。但真正的问题在于:在多线程环境下,你…

2026/8/25 12:06:07

Anycast 任播 网络协议深入:原理、配置与排障

Anycast 任播 网络协议深入:原理、配置与排障工具地址:https://www.speedce.com 社区论坛:https://bbs.speedce.com 联系:speedceadsgmail.com写在前面 围绕「Anycast 任播」,本文提供可落地的技术指南,并在…

2026/8/25 12:06:07

mysql like也是b+Tree索引吗

like也是bTree索引吗一、直接回答 是的,当 LIKE 查询能用到索引时,用的就是 BTree 索引,因为 MySQL 中默认的索引结构就是 BTree。但关键在于 BTree 的有序性决定了什么样的 LIKE 查询能用索引。二、BTree 为什么支持 LIKE ‘abc%’&#xff…

2026/8/25 12:06:07

Live2D模型集成实战:从原理到Web与Unity跨平台部署

最近在逛一些技术社区和开源项目时,我发现一个有趣的现象:越来越多的开发者,尤其是独立游戏开发者和虚拟主播技术栈的从业者,开始热衷于将高质量的 Live2D 模型集成到自己的项目中。这背后反映的,远不止是“让角色动起…

2026/8/25 12:06:07

构建高可玩性无人机虚拟座舱:从概念到Unity实践

在实际无人机开发与模拟训练领域,虚拟座舱技术正成为连接软件仿真与硬件操作的关键桥梁。它不仅仅是飞行数据的可视化界面,更是开发者进行算法验证、飞控调试以及用户体验设计的核心平台。对于“影翎无人机”这类强调“AG向自由飞”(即反重力…

2026/8/25 12:01:06

LangChain:ChatModel 聊天模型与可配置模拟器

目录 一、什么是聊天模型 1.1 什么是消息 1.2 模型的分类 1.2.1 真实聊天模型 1.2.2 可配置模拟器模型 1.3 与LLM的区别 1.4 注意事项 二、通过API来定义聊天模型 2.1 ChatDeepSeek 2.2 init_chat_model 2.2.1 函数定义 2.2.2 实例1:创建无配置模型 2.…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…