本文目录导读:

设计稿中的底部导航切换动画,核心在于微交互——通过流畅的视觉变化引导用户感知当前处于哪个Tab。
实现方式主要分为两类:前端代码实现(推荐) 和 动效设计工具实现,下面分别介绍这两种思路,并重点讲解前端代码实现中的几种流行效果。
前端代码实现(以移动端常见框架为例)
这是最终产品的实现方式,也是设计师需要与开发对齐的地方,核心思路是状态驱动 + CSS过渡/动画。
基础效果:图标/文字颜色与大小的平滑过渡
这是最常用、最保险的效果,几乎所有框架都支持。
- 原理: 利用CSS的
transition属性,监听color、font-size、opacity的变化。 - 实现:
.tab-item { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .tab-item.active { color: #007aff; font-size: 24px; /* 图标放大 */ } - 效果: 图标从灰色变为蓝色,同时轻微放大;文字从灰色变为深色。
进阶效果:指示器(小红点/下划线)滑动
视觉上最“显眼”的切换动画,告诉用户当前在哪个位置。
- 原理: 使用一个绝对定位的
div(指示器),通过计算当前激活Tab的offsetLeft和offsetTop来移动它。 - 实现(Vue3 + 原生JS示意):
<div class="tab-bar"> <div class="indicator" :style="{ transform: `translateX(${activeOffset}px)` }" /> <div v-for="tab in tabs" :key="tab.id" @click="switchTab(tab)"> <span>{{ tab.label }}</span> </div> </div>const switchTab = (tab) => { activeTab.value = tab.id; // 获取该tab DOM元素的offsetLeft const el = document.querySelector(`#tab-${tab.id}`); activeOffset.value = el.offsetLeft; };.indicator { position: absolute; bottom: 0; height: 3px; width: 20px; background: blue; transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); /* 带弹性的缓出 */ } - 效果: 指示器像一个滑块,从一个Tab平滑“滑”到另一个Tab。
高级效果:图标/背景形态变换(类似抖音/TikTok)
这种效果在App中越来越流行,视觉冲击力强。
- 原理: 利用 SVG 路径动画或 Lottie 动画,图标本身在不同Tab状态下有不同的形状,通过
path的d属性变化或形态插值来实现。 - 实现(使用 Lottie):
- 设计师工作: 在 After Effects 中设计好每个Tab的切换动画(一个心形从“空心”变成“实心”并弹跳一下),导出为
json格式的 Lottie 文件。 - 前端工作:
import lottie from 'lottie-web'; // 创建动画实例 const anim = lottie.loadAnimation({ container: document.getElementById('tab-icon'), renderer: 'svg', loop: false, autoplay: false, path: 'data.json' // 从设计稿导出的json }); // 点击Tab时,控制播放到特定帧 const switchTab = () => { if (isActive) { anim.playSegments([0, 60], true); // 播放从0到60帧的动画 } else { anim.playSegments([60, 0], true); // 逆向播放 } };
- 设计师工作: 在 After Effects 中设计好每个Tab的切换动画(一个心形从“空心”变成“实心”并弹跳一下),导出为
- 效果: 图标本身具有生动的微动画(如:星星旋转闪烁、房子门打开、人物点头),体验非常细腻。
交互细节提升
除了主动画,还可以结合触摸反馈增强体验:
- 点击态(Ripple 波纹): 点击时从点击点扩散开一个半透明圆。
- 缩放反馈: 点击瞬间图标缩小到0.9倍,松手后弹回1.0倍。
- Haptic (触感): 配合手机的振动反馈(需原生能力),在切换时提供物理触感。
设计工具实现(用于高保真原型或演示)
如果你正在做设计稿,单纯为了展示给客户或开发看效果,推荐以下两种方式:
-
Figma + Smart Animate:
- 创建两个页面(Page 1 和 Page 2),每个页面中底部导航的布局一致,但切换状态的Tab样式不同。
- 设置连接:点击Tab 1 跳转到 Page 2,交互触发选项选择“Smart Animate”。
- 效果:Figma会自动识别两个页面中相同图层(如同一个Tab图标)的位置、大小、颜色变化,并生成平滑的补间动画。
-
Prototype (Pixso / Framer):
使用这些工具的内置组件库,通常自带底部导航切换的动效预设,直接拖拽并调整参数即可。
设计稿中需要标注的关键信息
为了确保前端能完美还原,在设计稿中(尤其是交付给开发时),务必标注清楚:
| 项目 | 需要标注的内容 | 例子 |
|---|---|---|
| 动画时长 | 整个切换过程持续多久 | 300ms 或 3s |
| 缓动函数 | 是匀加速、先快后慢,还是带弹性 | cubic-bezier(0.34, 1.56, 0.64, 1) (带弹性的缓出) |
| 状态变化 | 未选中 -> 选中 的具体属性变化 | 图标颜色:#A0A0A0 -> #007AFF,图标大小:22px -> 26px |
| 指示器 | 宽度、高度、圆角、移动范围 | 宽度 20px,高 3px,圆角 5px,居中于Tab文字上方 |
| 图标动画 | 如果需要复杂动画(如Lottie) | 提供最终的 xxx.json 文件,并说明播放模式和触发时机 |
不同场景的推荐方案
- 普通App(功能型): 使用 颜色+大小滑动过渡 或 指示器滑动,实现简单,性能最好。
- 社交/娱乐App(沉浸式): 使用 Lottie 图标动画 + 背景形态切换,体验更生动,但需要设计师配合输出动画文件。
- 原型演示/设计稿: 使用 Figma Smart Animate 或 Framer 直接生成。
最后建议: 动画的“度”很重要,底部导航作为高频交互组件,动画应当快速(200-300ms)、流畅、不阻塞操作,过于花哨或漫长的动画会让用户感到拖延。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。