Figma 高级原型与条件逻辑实战:用 Variables 变量、Expressions 表达式与 If/Else 构建可运行真机交互

2026 年 11 月 10 日

在早期的 UI/UX 设计流程中,制作复杂交互原型是一项令设计师望而生畏的体力活。以常见的“电商购物车加减件数”或“勾选多选框计算总价”为例,由于传统原型工具仅支持单向页面跳转(Page-to-Page Navigation),设计师为了模拟 5 件商品的不同勾选组合与数量增减,常常需要复制出数十个高度重复的画板,画布上纵横交错着密密麻麻的蓝色连接线,俗称“意面连线(Spaghetti Prototype)”。一旦业务逻辑发生细微变更,维护整套画板的成本极其高昂。

随着 Figma 高级原型(Advanced Prototyping) 功能的全面普及,通过引入 Variables(变量)、Conditionals(条件逻辑 If/Else) 与 Expressions(数学与逻辑表达式),设计师终于能够在单个画板内直接赋予界面以状态存储与计算能力。一个原本需要数十个画板的复杂系统,现在仅需 1 个母版画板与几条清晰的条件逻辑动作即可完整呈现。

本文将深入拆解 Figma 高级原型的底层运行逻辑,并通过三个经典工业级案例(电商购物车计数器、表单合法性校验、多模式即时切换),系统传授构建生产级高保真动态原型的实操秘籍。

前置要求与知识储备

核心架构:传统画板跳转 vs 变量驱动的高级原型对比 #

要真正理解高级原型的优势,首先需要明确其与传统原型在数据流转层面的根本范式转移。

评估维度 传统画板跳转原型 (Screen-to-Screen) 变量驱动高级原型 (Variables + Conditionals)
画布画板数量 指数级膨胀(每增加一个状态需复制全新整屏画板) 极度收敛(单画板内依靠数据驱动局部元素动态变化)
交互连线复杂度 极其混乱,数十上百条连线交织成“意大利面” 极其整洁,交互事件直接挂载在组件触发器上
真实逻辑计算 无法进行动态加减乘除与字符串拼接,全是假数据 原生支持四则运算(+ - * /)与动态文本拼接
状态跨页面记忆 无法跨画板共享状态,返回上一页数据立即被重置 全局共享 Variables,在 A 页面勾选商品在 B 结算页直接读取
可维护性与迭代 极低(修改一个公共 Header 需手动同步数十个画板) 极高(仅需修改组件或局部逻辑,全局自动跟随更新)
真机可用性测试 用户若不按预设固定路径点击极易跳戏露出破绽 用户可自由任意次加减、乱序勾选,体验完全对齐真实 App

通过变量与条件分支,原型的保真度从单纯的“视觉动效模拟”升维到了“真实业务逻辑模拟”。

核心语法与工具箱解析:构建高级原型的 3 大基石 #

在 Figma 原型面板中,给图层添加交互(Interaction)触发器(如 On click、On hover)后,操作动作已不仅限于 Navigate to,而是新增了以下关键模块:

1. 变量类型(Variable Types) #

在 Local Variables 面板中,创建专属于原型的变量合集(建议单独命名为 State 或 PrototypeData):

  • Number(数值型):用于记录商品单价、购买数量、购物车总金额、页码索引等。
  • Boolean(布尔型):用于记录开关开启/关闭、协议勾选状态、弹窗显隐、密码是否可见(true / false)。
  • String(字符串型):用于记录动态展示的用户名、输入框动态文本、校验错误文案。
  • Color(颜色型):用于动态切换主题色或高亮提示。

2. 核心动作:Set Variable 与 Conditional #

  • Set variable(设置变量):改变某个变量的值。支持赋固定值(如 is_logged_in = true),也支持基于表达式赋值(如 cart_count = cart_count + 1)。
  • Conditional(条件判断 If / Else):根据判断逻辑分流动作。例如:if (cart_count > 0) 则允许结算,else 则弹出 toast 提示“请先选择商品”。

3. 原生表达式支持(Expressions) #

Figma 支持在变量赋值与判断中编写原生算术与逻辑表达式:

  • 算术运算:+(加法 / 字符串连接)、-(减法)、*(乘法)、/(除法)。
  • 比较运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
  • 逻辑组合:and(与)、or(或)。

实战案例一:电商商品增减计数器与总价动态计算 #

这是一个最普遍也最考验逻辑的原型场景:用户点击加号增加商品数量,点击减号减少数量(数量不可小于 1),页面底部的总金额伴随数量即时变化。

步骤 1:定义原型局部变量 #

打开 Local Variables 面板,在名为 CartState 的集合中新建以下变量:

  1. item_count(Number 类型,默认初始值设为 1)。
  2. unit_price(Number 类型,默认初始值设为 49)。
  3. total_price(Number 类型,默认初始值设为 49)。

步骤 2:图层与变量绑定 #

  1. 在画布中选中展示商品数量的文本图层(显示为 "1")。
  2. 在右侧文本属性面板的 Text 区域,点击右下角的小柱状图图标(Apply variable),选择绑定为 item_count。
  3. 选中底部展示总价的文本图层,绑定为 total_price。

步骤 3:编写加号按钮(Plus Button)的交互逻辑 #

选中加号图标按钮,在 Prototype 选项卡中添加交互:

  • Trigger:On click
  • Action 1:选择 Set variable
    • Target: item_count
    • Expression: item_count + 1
  • Action 2:选择 Set variable
    • Target: total_price
    • Expression: (item_count + 1) * unit_price

步骤 4:编写减号按钮(Minus Button)的条件逻辑 #

对于减号按钮,我们必须限制数量不能减到 0 或负数,因此需要使用 Conditional:

  • Trigger:On click
  • Action:选择 Conditional
    • If item_count > 1
      • Sub-action 1: Set variable -> item_count = item_count - 1
      • Sub-action 2: Set variable -> total_price = (item_count - 1) * unit_price
    • Else
      • 无动作,或弹出轻提示 Toast(数量已达下限)。

此时按下 Shift + Space 调出就地预览,即可随意连续点击加减按钮,界面数字与总金额将丝滑动态联动,无需多建一个画板!

实战案例二:登录表单校验与错误状态机联动 #

在复杂的企业中后台或移动端注册场景中,表单校验通常需要根据输入框内容动态提示“密码过短”或激活“确认登录”按钮。

1. 变量与状态规划 #

新建变量集合 FormValidation:

  • input_password(String 类型,初始为空)。
  • is_valid(Boolean 类型,初始为 false)。
  • error_visible(Boolean 类型,初始为 false)。

2. 错误提示组件显隐控制 #

选中错误提示红字(如“密码不能少于 6 位”),在其右侧图层显隐(Layer Visibility,眼睛图标)上右键或点击绑定变量,选择绑定到 error_visible。

  • 当 error_visible == true 时,错误文案自动出现。
  • 当 error_visible == false 时,错误文案在画布与原型中彻底隐藏。

3. 提交按钮的条件判断分支 #

给“确认登录”主按钮添加点击事件:

  • Action:Conditional
  • If input_password == ""
    • Set variable: error_visible = true
  • Else
    • Set variable: error_visible = false
    • Navigate to: 登录成功后的主看板页面(Dashboard)

这样就完全摆脱了传统的“点一下跳到带报错的假页面,再点一下跳到主页”的死板链路。

实战案例三:跨多页面持久化与主题模式切换 #

高级原型的另一杀手锏是变量跨画板状态继承。

假设你的产品包含首页、详情页与个人中心 3 个页面:

  1. 在首页中将用户选中的语言变量 current_lang 设为 "en",并设置暗黑主题变量 dark_theme = true。
  2. 当用户点击原型中的跳转按钮进入个人中心画板时,个人中心内的所有绑定了该变量的组件和文本会自动继承 "en" 与暗黑颜色模式。
  3. 相比于传统方式需要复制“英文亮色”、“英文暗色”、“中文亮色”、“中文暗色”共 4 套完整页面(12 个画板),现在仍然仅需 3 个基础画板即可无缝完成测试。

如需进一步了解如何将组件内状态动画(Component States)与页面级变量结合,建议配合 高级微交互原型:智能动画与组件状态机 深入实践。

高级原型调试与排障诊断决策树 #

在搭建包含多重条件与变量的高级原型时,逻辑错误在所难免。以下汇总了最常见的 5 大疑难问题及抢救方案:

故障现象 潜在根本原因 排查与修复步骤
点击按钮后变量数值没有发生任何改变 文本图层没有成功绑定变量,仅手动输入了相同字符 检查图层面板的 Text 是否带有紫色变量胶囊标签,重新 Apply variable
数学公式计算结果出现异常(如 10+1 变成 101) 参与运算的变量被误创建为 String 字符串,导致触发拼接操作 进入 Local Variables 面板,将变量类型明确重置为 Number
原型预览中修改的状态在重新播放时无法复原 演示播放器(Presentation View)缓存了上一轮测试的状态变量 点击右下角重启图标,或按下键盘快捷键 R 强制重置原型全局变量
条件判断 If 无法进入 Else 分支 比较表达式包含语法冲突(如混用了中文全角等号或缺少空格) 检查表达式面板,确保使用半角英文字符 ==、!=,并在两边留出空格
带大量变量的原型在浏览器中极度卡顿甚至白屏 原型中嵌套了过多未解构的循环事件或超大位图图层 减少单一事件中的动作链深度,参考 内存限制突破与性能优化指南 释放 WebGL 纹理

总结:高级原型工程化落地的最佳实践 #

掌握了 Variables 与 Conditionals 并不意味着要在原型中手写一套完整的前端业务代码。原型的本质依然是敏捷传达产品体验与快速验证用户假设。

在团队推行高级原型时,建议遵循以下三项黄金守则:

  1. 适度保真,克制逻辑:优先对核心转化漏斗(如支付下单、核心功能向导)使用条件逻辑,次要边缘链路依然保持简单跳转,避免过度投入精力。
  2. 规范变量命名空间:建立语义化的变量命名规范(如 proto.checkout.item_count),避免变量池混乱后无法溯源。
  3. 沉淀标准化交互模块:将加减计数器、Tab 切换器、多选列表等常用交互单元封装成带有预设变量的原型组件库,在团队内一键拖拽复用。

当高保真交互验证完毕并准备交付工程团队时,前端开发者可借助 Dev Mode 直观读取变量表达式背后的状态流转逻辑,具体协同流程可参阅 Figma 转 HTML 与前端代码交付实战 与 Figma 疑难故障排查手册。

❓ 常见问题与答疑 (FAQ)

高频疑难解析与避坑指南
A

完全不需要。绝大多数核心功能在免费 Starter 计划中均可完整体验与实操练习,无需额外付费购买付费团队版。