T

Tanka 平台组设计规范

全局 Loading & Error 状态设计指南

v1.0 草案 更新时间:2026-08-06

1. 背景与痛点分析

当前 Tanka 平台在网络慢或异常时,页面加载和异常反馈存在明显的体验断层。主要表现在以下两个方面:

痛点一:加载中状态粗暴且不统一

目前多处直接在页面中央弹出一个黑色的 Loading 方块。这种设计视觉过重,且存在“有的地方有、有的地方没有”的无序状态,导致页面内容加载时产生强烈的视觉跳动感。

痛点二:加载失败缺乏反馈与兜底

网络异常或接口报错时,页面基本处于“无反馈”状态(白屏或卡死在加载态),缺少明确的错误提示和“重试”按钮,用户只能被迫手动刷新整个网页。

2. Loading 场景分类矩阵

加载状态不能一刀切。我们需要根据触发时机、内容形态、耗时预期、是否阻塞四个维度,将场景细分并匹配最合适的设计表现。

场景类型 触发时机 内容形态 耗时预期 是否阻塞交互 推荐加载方案
首屏冷启动 App/网页首次打开 无(全白状态) 1s - 3s 完全阻塞 极简 Logo 呼吸灯 / 品牌 Spinner
模块/路由切换 点击导航切换大模块 整页/大区域内容 500ms - 2s 部分阻塞 顶部进度条 + 局部骨架屏
结构化数据加载 进入列表、卡片页 消息流、群组、Memo列表 500ms - 1.5s 不阻塞 骨架屏 (Skeleton)
用户主动提交 点击发送、保存、创建 按钮、输入框、小卡片 < 1s 局部阻塞 按钮内 Spinner / 局部小转圈
不确定耗时任务 AI 生成、大文件解析导入 自由文本、复杂图表 > 3s (长耗时) 不阻塞 渐进式反馈 (打字机/步骤文案)

3. 细分加载方案与视觉示意

方案 01 结构化内容首选

骨架屏 (Skeleton)

在真实数据未返回前,绘制出与真实内容排版一致的灰色占位块。加载完成后原地替换,避免视觉跳动。

方案 02 轻量交互首选

Spinner / 局部小转圈

用于按钮、输入框或局部小组件的异步操作。不阻塞页面其余部分的交互,视觉干扰极小。

更新中
方案 03 路由切换首选

顶部进度条 (Progress Bar)

在页面顶部边缘显示一条极细的进度线。适用于大模块切换,给用户一种“轻快、无缝”的浏览体验。

正在加载新模块... 90%
方案 04 AI / 长耗时首选

渐进式反馈 (Progressive)

针对无法预估耗时的复杂任务(如 AI 生成),通过打字机动效或阶段性文案,向用户传达“系统正在努力工作”。

正在分析上下文...
"正在为您梳理 15 条历史消息..."
方案 05 App 启动首选

首屏冷启动 (Splash)

应用刚打开、没有任何结构可预告时。使用极简的品牌 Logo 呼吸灯或居中 Spinner,建立第一视觉锚点。

T
Tanka Loading
不推荐 应逐步废弃

全局居中黑色方块

黑色方块视觉过重,强行打断用户视线。且由于是绝对定位居中,在不同尺寸屏幕上极易遮挡关键操作,造成“假死”错觉。

加载中...

4. 加载失败 (Error State) 规范

当加载失败时,必须提供明确的反馈和出口。禁止白屏或无响应。

1 区分错误类型与文案

  • 网络异常(客户端问题):提示“网络连接似乎中断了,请检查您的网络设置”。
  • 服务异常(服务端问题):提示“服务器开小差了,请稍后再试(错误码: 500)”。

2 强制提供“重试”机制

失败态卡片中必须包含一个高亮的“重新加载”“重试”按钮。点击后,局部组件重新发起 API 请求,并回到 Loading 状态,无需用户手动刷新整页。

3 与“空状态”进行视觉区分

避免混淆。空状态(No Data)代表系统正常但无内容,插画应偏向中性、轻松;加载失败(Error)代表系统异常,插画或图标应使用警示色(如琥珀色/红色),并带有明确的断网或感叹号隐喻。

标准失败态组件示意 (Error Component)

网络连接异常

无法连接到 Tanka 服务器,请检查您的网络连接是否正常。

5. 落地与收敛建议

第一步:组件化收敛

由设计团队输出统一的 Skeleton、Spinner、ErrorState 组件规范,开发封装进公共组件库,严禁各页面自行写死 Loading 样式。

第二步:渐进式替换

优先替换核心高频页面(如 Chat 消息流、Memo 列表、搜索结果页),废弃黑色方块,逐步向骨架屏和局部 Spinner 过渡。

第三步:全局拦截器注入

在前端 API 请求拦截器(Axios/Fetch Interceptor)中统一处理 5xx/网络断开等异常,自动触发全局或区域的 ErrorState 组件,确保兜底。