界面三审报告 v4 · 填充密度 / 拖入 / 翻牌器 / 块矩阵 / 触摸尺寸 / 动效规范

PC 画布 1440×900(×0.36)、移动画布 390×844(×0.74),真实像素绘制后等比缩放;全部 CSS/SVG + 少量原生 JS 生成网格,无截图、无位图、无外链。

① PC 首屏填充(三栏 + 拖入区为视觉主体)

让用户做一件事:把文件拖进来就发。(左:码 + 翻牌器;中:大拖入区;右:最近传输)

PC · 1440×900
雁书
AWQW
阿雁
今日发送
12
今日接收
3
成功率
96%
端到端加密 · 私钥仅存本机
把文件拖到这里
或点击选择 · 单个文件最大 4 GB
最近传输
季度对账.xlsx
2.5 MB · 12:04
完成
产品视频.mp4
820 MB · 11:51
传输中
合同扫描.pdf
6.1 MB · 昨天
完成
日志包.zip
44 MB · 昨天
失败
共 4 条
移动 · 390×844(拖入区退化为整块点击区)
雁书
AWQW
阿雁
今日发送
12
今日接收
3
成功率
96%
选择文件
🔒 端到端加密 · 私钥仅存本机
填充逻辑:PC 三栏 420 / 自适应 / 380,中栏拖入区 flex:1 吃掉全部剩余高度(900 高不再留空);左栏统计用翻牌器(等宽数字 tabular-nums,翻转 360ms,位数变化不跳动);背景是 48px 网格以 26s 匀速平移,只动 transform,prefers-reduced-motion 下静止。移动端把拖入区降级为 180 高整块点击区,主操作 56 高贴底。

② 传输进度:块矩阵(迅雷式)+ 聚合规则

让用户做一件事:一眼看出传到哪、还剩多久。(四态色 + 聚合 + 大号速率)

PC · 1440×900(1024 块聚合为 32×32)
雁书
✕
AWQW
发给 阿龟 · P19X
已传 / 总大小
612
MB / 1024 MB
🔒 端到端加密 · 私钥仅存本机
42.8
MB/s
剩余时间
9 秒
等待 传输中 完成 失败
1024 块 → 32×32 网格(1 格 = 1 块)
本批 1024 块
已完成
612
传输中
3
等待
409
失败
0
移动 · 390×844(自适应 10 列)
雁书
✕
42.8
MB/s
剩余
9 秒
612 MB / 1024 MB · 10 列 × 10 行(每格 ≈ 10 块)
🔒 端到端加密 · 私钥仅存本机
块数 n网格每格代表格色规则
n ≤ 25616 × 16(移动 10 × ceil(n/10))1 块四态直取:等待 / 传输中 / 完成 / 失败
257 ≤ n ≤ 102432 × 32(移动 10 × 10)ceil(n / 1024) 块(n=1024 时正好 1 块/格)任一失败 → 失败色;全部完成 → 完成色;有在传 → 传输中色(呼吸动画);部分完成 → 按完成比例渐变填充;否则等待色
n > 1024固定 32 × 32(移动 10 × 10)ceil(n / 1024) 块(如 4096 块 → 每格 4 块)同上;渐变填充比例 = 该格已完成块数 / 每格块数
聚合规则一句话:格数上限 1024(32×32;移动 10×10),每格代表 ceil(n/格数) 块,格色按「任一失败→失败、全部完成→完成、有在传→传输中、其余按完成比例渐变」取;DOM 节点数恒 ≤1024,更新走 requestAnimationFrame 批量(每帧最多改 64 格),网格不承担点击(纯展示,避免误触)。

③ 移动端密度与触摸(目标 ≥48×48,行高 ≥56)

让用户做一件事:单手点得到、点得准。(列表密度 + 空态填满)

移动 · 390×844(列表密度)
雁书
⟳
3 个文件待接收
3
龟
阿龟 · 季度对账.xlsx
2.5 MB · 2 分钟前
雁
阿雁 · 产品视频.mp4
820 MB · 12 分钟前
律
律师 · 合同扫描.pdf
6.1 MB · 1 小时前
🔒 端到端加密 · 私钥仅存本机
PC · 1440×900(同密度对照:行 72 / 图标 48)
雁书
AWQW
今日发送
12
今日接收
3
成功率
96%
🔒 端到端加密 · 私钥仅存本机
3 个文件待接收
阿龟 · 季度对账.xlsx
2.5 MB · 2 分钟前
↓
阿雁 · 产品视频.mp4
820 MB · 12 分钟前
↓
律师 · 合同扫描.pdf
6.1 MB · 1 小时前
↓
共 3 条
触摸/点击尺寸
图标按钮
48
主操作高度
56
列表行高
72
移动 · 390×844(空态填满,不留大片空白)
雁书
⟳
暂无待接收文件
把接收码告诉对方,或先把文件发给别人
🔒 端到端加密 · 私钥仅存本机
元素最小尺寸实际取值说明
图标按钮44×4448×48顶栏锁 / 刷新 / 下载 / 举报;间隔 ≥8px
主操作≥48 高56 高 · 整宽贴底,距屏底 34px safe-area
列表行≥56 高72 高两行文字 + 右侧 48 图标,整行可点
块矩阵视觉 ≥8px10 列 / 格 ≈ 24px不承担点击(纯展示,防误触)
密度要点:列表行 72 高(≥56 底线)、图标按钮 48、主操作 56 整宽;空态用 120 插画 + 标题 + 两个动作填满中部,底部只剩安全行,不留整屏空白。

④ 动效规范(哪些动、哪些绝对不动、性能红线)

让用户做一件事:动作有回应,但不被动画打扰。(时长 / 缓动 / 触发 / 降级)

动效时长 / 缓动触发条件降级(reduced-motion)
统计翻牌器360ms · cubic-bezier(.2,.7,.3,1)数值变化时(发送/接收成功后);首屏仅一次入场直接显示最终数字,无翻转
拖入区悬停 / 拖入180ms · ease-out:hover / dragover(边框与底色变化,1.004 缩放)只保留边框变色,取消缩放
文件落点420ms · cubic-bezier(.2,.8,.2,1)文件被放下 / 选中无位移,直接出现
进度块(传输中)1100ms · ease-in-out 循环该格状态为「传输中」静态实色,不呼吸
空态插画入场 420ms,之后静止首次进入空态无入场,直接显示
背景网格26s 线性循环仅 PC 首屏;移动端关闭完全静止(不绘制动画层)
绝对不动:① 不闪(无 blink 类高频闪烁,频率上限 ≤3 次/秒且不用于吸引注意);② 不自动循环大动画(整屏位移、整卡缩放、自动轮播一律禁止);③ 数字不做无限跳动(只有真实数值变化才翻);④ 滚动不劫持(不做视差/吸顶动画);⑤ 进度条不做流光扫过。
性能红线:
  • 网格更新走 requestAnimationFrame 批量,单帧最多改 64 个格(1024 格全量刷新分 16 帧完成);
  • 网格DOM 节点上限 1024(移动 100),超出的块只聚合不新增节点;
  • 动画只碰 transform / opacity,不改 width/height/top/left(避免重排);
  • 单页同时运行的动画实例 ≤ 3 类(翻牌 / 进度呼吸 / 背景);移动端背景动画关闭;
  • 目标 60fps:单帧 JS 预算 ≤ 8ms;掉帧(连续 3 帧 > 20ms)时自动降级为静态色块。