Figma 新手引导与漫游气泡系统(Tour & Onboarding Coachmark System)组件架构实战:从视口半透明打光镂空(Mask Cutout)、12 方向锚定气泡、Variables 多步状态机到 Dev Mode 前端 driver.js / Ant Design Tour 交付
在各类企业级 SaaS 平台、金融交易终端、协同办公软件与高频消费级 App 中,新手引导与漫游气泡系统(Product Tour / Onboarding Coachmark System) 是引导用户快速熟悉新版本功能、缩短认知摩擦(Time-to-Value)并驱动核心关键链路转化的最重要体验载体。
然而在日常设计实践中,新手引导系统往往是设计稿维护与研发交付的重灾区:
- 画板数量呈几何级数爆炸:为了表达一个包含 5 个步骤的新手向导,设计师通常会复制出 5 个巨大的全屏画板。一旦底层主界面发生微小调整,必须在 5 个画板中反复手动同步,极其容易发生状态与图层漂移;
- 打光镂空效果无法自适应:常见的“局部打光高亮”往往依赖手工绘制半透明矩形加局部挖孔。当被引导的按钮或卡片尺寸变动时,镂空孔位无法跟随目标元素弹性缩放;
- 气泡箭角错位与内容撑破:引导气泡未建立规范的 Auto Layout 自动布局 约束,更换多语言文案或调整指示方向时,三角箭头与气泡边缘发生重叠、断裂或悬空;
- 原型交互脆弱且无法分支跳步:传统原型跳转只能生硬串联,无法通过 Figma 变量 Variables 记录“当前步骤索引”并实现“跳过向导”、“不再提示”等动态双向状态控制;
- 研发交付鸿沟巨大:在 Dev Mode 开发模式 中,前端工程师只能看到分散的绝对坐标,无法提炼出如
target锚点选择器、placement方位枚举以及 driver.js / Ant Design Tour 的标准配置参数。
本文将从引导气泡原子模型切入,系统拆解打光镂空遮罩黑科技、12 方向智能箭头贴合、Variables 步进状态机及现代前端代码交付规范。
引导气泡卡片(Coachmark Bubble)原子组件模型与解耦 #
一个高可用、可复用的引导气泡组件,绝不是单纯的“矩形 + 尖角”。为了满足不同产品场景,必须将其划分为**内容容器(Bubble Content)与方向箭头(Indicator Arrow)**两层核心解耦模型。
┌────────────────────────────────────────────────────────────────────────┐
│ Coachmark Bubble 引导气泡解耦物理模型 │
│ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [Header Container] 弹性顶栏 (Auto Layout Horizontal) │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Title 标题 │ │ Close (✕) │ │ │
│ │ └──────────────┘ └──────────────┘ │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ [Body Container] 说明正文 (Auto Layout Vertical) │ │
│ │ ┌────────────────────────────────────────────────────────┐ │ │
│ │ │ Description 辅助解释文案(开启 Fill container 换行) │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ │ ┌────────────────────────────────────────────────────────┐ │ │
│ │ │ Optional Media Slot (插图 / Lottie 动效 / 快捷键徽标) │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ ├────────────────────────────────────────────────────────────────┤ │
│ │ [Footer Container] 底栏控制区 (Auto Layout Horizontal) │ │
│ │ ┌────────────────────────┐ ┌────────────────┐ │ │
│ │ │ Step Indicator (1 / 4) │ │ Action Buttons │ │ │
│ │ │ (点状 Dots 或 数字文本)│ │ 上一步 / 下一步│ │ │
│ │ └────────────────────────┘ └────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ ▲ │
│ ┌────────┴────────┐ │
│ │ Arrow Slot (尖角│ │
│ │ 8×6px 独立图元) │ │
│ └─────────────────┘ │
└────────────────────────────────────────────────────────────────────────┘
1. 引导气泡核心子层级规范 #
基于 组件变体与属性,气泡卡片结构应拆解为以下独立插槽:
Header Slot:包含步骤标题(Text)与跳过/关闭按钮(Ghost Icon Button),支持布尔属性(Boolean Property)一键隐藏;Body Slot:核心内容区,文本图层设为Fill container并搭配Auto height,彻底杜绝多语言文案溢出截断;Footer Slot:左侧为进度指示(如点状 Progress Dots 或Step 2/5文本徽标),右侧为操作按钮组(“跳过”、“上一步”、“下一步 / 完成”);Arrow Slot:可插拔尖角图元,尺寸推荐为8×6px或12×8px,通过绝对定位与对齐约束与卡片外框无缝缝合。
2. 12 方向箭角贴合决策矩阵 #
在真实页面中,目标被高亮元素可能位于屏幕任何位置。引导气泡必须支持 12 种主流相对定位方位(Placement):
| 相对方位 (Placement) | 气泡相对宿主位置 | 箭头所在气泡边缘 | 对齐约束配置 (Constraints) | 适用典型界面元素 |
|---|---|---|---|---|
top / top-start / top-end | 位于目标正上方 | 气泡底部朝下 | Bottom / Left/Center/Right | 底部固定工具栏、状态栏指标 |
bottom / bottom-start / bottom-end | 位于目标正下方 | 气泡顶部朝上 | Top / Left/Center/Right | 顶部导航栏、搜索框、全局筛选器 |
left / left-start / left-end | 位于目标正左侧 | 气泡右侧朝右 | Right / Top/Center/Bottom | 右侧抽屉、配置面板、操作图标 |
right / right-start / right-end | 位于目标正右侧 | 气泡左侧朝左 | Left / Top/Center/Bottom | 左侧侧边栏、树状目录导航、菜单 |
视口暗色打光镂空遮罩(Spotlight Mask Cutout)实现黑科技 #
在很多低效设计稿中,设计师往往通过手动切出带透明孔的静态图片或拼贴 4 块矩形来模拟遮罩,一旦目标元素位移便全盘崩溃。在 Figma 中,实现响应式、动态高保真镂空有两种业界领先方案:
┌────────────────────────────────────────────────────────────────────────┐
│ 打光遮罩双方案实现拓扑对比 │
│ │
│ 【方案 A:布尔减去运算 (Subtract)】 【方案 B:巨型多重阴影 (Box-Shadow)】 │
│ │
│ ┌───────────────────────────────┐ ┌───────────────────────────────┐ │
│ │ [Mask Frame] 100% 视口全屏 │ │ [Spotlight Target] 目标高亮框 │ │
│ │ │ │ (透明背景 + 4px 圆角) │ │
│ │ ┌─────────────────────┐ │ │ │ │
│ │ │ 镂空洞口 (Cutout) │ │ │ ┌───────────────────────┐ │ │
│ │ │ Subtract 矢量布尔 │ │ │ │ 目标按钮 / 卡片 │ │ │
│ │ └─────────────────────┘ │ │ └───────────────────────┘ │ │
│ │ │ │ │ │
│ │ 填充: 黑色 70% 不透明度 │ │ 外阴影: 0 0 0 9999px rgba(0) │ │
│ └───────────────────────────────┘ └───────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────┘
两种遮罩方案深度对比表 #
| 评估维度 | 方案 A:布尔减去运算 (Subtract Group) | 方案 B:巨型外扩散阴影 (Giant Box-Shadow) |
|---|---|---|
| 实现原理 | 全屏深色矩形 Subtract 目标镂空形状 | 目标高亮框设置 0 0 0 9999px rgba(0,0,0,0.7) 扩散阴影 |
| 支持形状 | 任意形状:圆角矩形、圆形、异形多边形 | 仅支持与目标相同的简单圆角矩形 |
| 交互穿透 | 需要手动配置穿透热区 | 极高保真:镂空区域天然可点击 |
| Figma 原型渲染性能 | 运算负载适中,平滑无卡顿 | 极轻量:仅需渲染单层图层阴影 |
| Dev Mode 代码映射 | 映射现代 Web 的 SVG <clipPath> 或 mask-image | 100% 直译 现代 CSS box-shadow 遮罩标准写法 |
| 推荐适用场景 | 复杂多异形高亮、带光晕描边的品牌宣传向导 | B 端中后台系统、标准通用组件库(强烈推荐) |
实操落地建议:对于现代 B 端 Web/SaaS 产品,强烈推荐 方案 B(巨型阴影法)!只需为聚焦外框设置
box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.75),并为聚焦框添加2px solid #3b82f6的品牌主色脉冲高亮描边。研发在 Dev Mode 开发模式 中能 1:1 提取纯 CSS 代码,完全无需切图。
基于 Figma Variables 的单画板多步漫游状态机原型 #
传统上,为了制作 4 步引导,设计师必须创建 4 个完整页面并在其间连线 12 条原型跳转线。一旦需要修改步骤顺序,整张连线网瞬间缠绕死锁。通过 Figma 变量 Variables 与条件逻辑(Conditional Actions),我们可以用单个画板实现极致优雅的高保真漫游原型!
1. 变量集合(Variables Collection)定义 #
创建名为 TourState 的专用变量集合,录入以下 3 个核心原子变量:
| 变量名称 (Variable) | 类型 (Type) | 初始默认值 (Default) | 业务作用与说明 |
|---|---|---|---|
tourStep | Number | 1 | 当前高亮向导步数(1, 2, 3, 4...) |
tourMaxSteps | Number | 4 | 当前漫游总步数,用于驱动底栏 1 / 4 动态文案 |
isTourActive | Boolean | true | 控制全局遮罩层与向导气泡的整体显示与销毁 |
2. 状态机动态绑定与条件流转逻辑 #
在画布中,利用单画板架构进行逻辑图层绑定:
┌────────────────────────────────────────────────────────────────────────┐
│ Variables 驱动的单画板向导状态机运行流 │
│ │
│ [点击 "下一步" 按钮] │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ 评估条件分支: if (tourStep < tourMaxSteps) │ │
│ │ │ │
│ │ [分支 YES] ──> Set variable tourStep = tourStep + 1 │ │
│ │ (联动: 气泡平移到新目标、指示器跳到下一格) │ │
│ │ │ │
│ │ [分支 NO] ──> Set variable isTourActive = false │ │
│ │ (向导完成,销毁遮罩,回归正常交互) │ │
│ └────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────┘
- 图层显隐绑定:将全局遮罩与向导浮层的
Layer Visibility眼睛图标直接绑定到布尔变量isTourActive; - 步骤指示器文本绑定:底栏的步数文本直接绑定表达式,或通过变量驱动指示小圆点的
active变体状态; - “下一步”按钮交互逻辑(On click):
- 添加
Conditional条件判断: if tourStep < tourMaxSteps:执行Set variable tourStep to tourStep + 1;else:执行Set variable isTourActive to false;
- 添加
- “上一步”按钮交互逻辑(On click):
- 添加条件分支:
if tourStep > 1执行Set variable tourStep to tourStep - 1;
- 添加条件分支:
- “跳过”或“✕”按钮:直接触发
Set variable isTourActive to false。
通过这套状态机模型,整个向导原型的维护成本降低 80% 以上,且无论后续增加还是削减步骤,只需微调 tourMaxSteps 数值即可自动闭环。
常见故障排查与避坑指南 #
在构建与交付引导系统时,常见疑难故障与解决方案如下(更多高频系统报错可参阅 Figma 常见报错与疑难故障诊断手册):
1. 气泡箭头在拉伸时产生悬空或形变 #
- 根因分析:箭头图元未采用正确的绝对定位(Absolute Position)并误设了
Scale缩放约束; - 排障方案:在气泡 Auto Layout 容器内将箭头设为绝对定位,贴紧外框边界,并设置对应方向的锁定约束(如 Bottom + Center)。
2. 页面存在滚动时引导气泡位置脱节漂移 #
- 根因分析:向导浮层脱离了视口层叠上下文,误将气泡放入了局部的内部滚动容器中;
- 排障方案:确保整个 Tour 引导容器置于根画布的最顶层(Z-index 最大),并开启
Fix position when scrolling吸顶锁定。
Dev Mode 研发交付与现代 Web 组件无损映射 #
在 Dev Mode 开发模式 中,向导组件能以极高精度映射现代开源引导库(如 Ant Design Tour、Driver.js、Shepherd.js):
1. 结构化配置参数对照表 #
| Figma 设计 Token / 属性 | Ant Design Tour 配置项 | Driver.js 配置项 | CSS 原生对应属性 |
|---|---|---|---|
| 气泡标题 (Header) | title: ReactNode | popover.title | font-size: 16px; font-weight: 600; |
| 正文说明 (Body) | description: ReactNode | popover.description | font-size: 14px; line-height: 1.5; |
| 相对方位 (Placement) | placement: 'bottomLeft' | popover.side: 'bottom' | data-popper-placement="bottom-start" |
| 打光遮罩 (Mask) | mask: { color: 'rgba(0,0,0,0.7)' } | overlayColor: 'rgba(0,0,0,0.7)' | box-shadow: 0 0 0 9999px rgba(...) |
| 步数指示 (Dots) | indicatorsRender | popover.progressText | display: flex; gap: 6px; |
2. 现代 React + TypeScript 规范交付代码示例 #
import React, { useState } from 'react';
import { Tour, TourProps, Button } from 'antd';
export const ProductOnboardingTour: React.FC = () => {
const [open, setOpen] = useState<boolean>(true);
// 1:1 映射 Figma 中的 3 步向导配置
const steps: TourProps['steps'] = [
{
title: '创建全新设计文件',
description: '点击此处快速初始化团队设计画板,支持直接导入本地 .fig 格式文件。',
target: () => document.getElementById('btn-create-file'),
placement: 'bottomLeft',
},
{
title: '团队资产库与变量',
description: '在这里一键开启团队 Design Tokens 规范与全局组件库同步。',
target: () => document.getElementById('nav-assets-library'),
placement: 'right',
},
{
title: 'Dev Mode 研发协同',
description: '按 Shift+D 快速切入开发者检查模式,一键提取生产级代码与语义样式。',
target: () => document.getElementById('btn-dev-mode'),
placement: 'top',
},
];
return (
<Tour
open={open}
onClose={() => setOpen(false)}
steps={steps}
mask={{
style: {
boxShadow: 'inset 0 0 0 2000px rgba(15, 23, 42, 0.75)',
},
}}
arrow={{ pointAtCenter: true }}
/>
);
};
3. ARIA 无障碍(a11y)合规建议 #
- 为浮层容器添加
role="dialog"与aria-modal="true"; - 引导展开时自动将焦点转移到气泡内的“下一步”操作按钮,形成无障碍焦点陷阱(Focus Trap);
- 支持键盘
Esc按键全局退出向导,确保符合 WCAG 2.2 AA 级无障碍交互标准。
核心手册与速查工具
高频手册与实用设计生产力工具直达常见问题与答疑 (FAQ)
高频疑难解析与避坑指南完全不需要。绝大多数核心功能在免费 Starter 计划中均可完整体验与实操练习,无需额外付费购买付费团队版。