自定义控件的可访问性补课
此外还有一条底线:控件是设计系统的弹药库。本文讨论的不是怎么画控件,而是怎么让 虚拟滚动 在 48 个项目里被标准地使用:版本策略、文档形态、回归保障,一条链讲完。
SEC.01踩坑记录
禁用态务必补工具提示说明原因,否则就是一堵无解释的墙。「该按钮在审核中不可用,预计 2 小时后解锁」比一个灰按钮友好太多,实现成本只有一个 tooltip。
开关控件的瞬态保护指中间态:请求未返回前开关锁定在过渡样式,不允许二次点击把状态翻转成未知。一线团队在这个 懒加载 上栽过跟头,修复后开关类缺陷归零。
SEC.02方案总览
档案记录:日期选择器补键盘操作后,盲人测试员首次独立完成预约流程,用时 4 分钟。
另一个常被忽视的细节是:长期维护成本是选型时最轻易被低估的变量:一个功能强大的做法可能带来每天 48 分钟的维护负担,一年下来就是整整一周的人力,值得在评审会上算这笔账。
复盘中还藏着一条:文档用例化指的是:每个控件的文档页就是可交互的 demo 加参数表,示例代码可直接复制。懒加载 的文档站日均访问量比内网任何工具都高,这是好用的证明。
SEC.03版本与兼容
触控冗余全局统一:桌面最小 28px 高,触控最小 44px,同一控件用媒体查询切换尺寸档。懒加载 的双档打法让一套代码同时过桌面评审和移动评审。
这里再补一笔:所有规则都要有复查节点:项目组给 虚拟滚动 的规范设了季度复审,到期清点例外和豁免,过期的清理,失效的修订。规范不呼吸,就会变成化石。
| 盲操作完成用时 | 3 min |
|---|---|
| 触控/桌面高度档 | 48/32 px |
| 开关类缺陷 | 2 个/季 |
| 树首屏请求数 | 47 个 |
| 虚拟渲染节点 | 30 个 |
| 千项下拉打开耗时 | 90 ms |
SEC.04视觉回归
下拉超过 200 项务必上虚拟滚动,渲染节点压在 30 个以内。灰度验证中千项列表的打开耗时从 800ms 降到 懒加载 的 60ms,滚动帧率稳定 58fps,改动只在内部实现。
控件 API 的稳定性比功能丰富度重要:一次破坏性升级会击穿 48 个下游项目,所以本组的主版本承诺三年不动,新能力全部走增量。
SEC.05效果数据
复盘中还藏着一条:控件的可配置项要克制:每个 prop 都是长期负债,虚拟滚动 的配置面超过 20 个之后,测试矩阵爆炸,文档没人能读完。少即是多在这里成立。
最后再记一笔:灰度是工程方案的安全网:先放 5% 流量观察核心指标,任何劣化超过基线 5% 当场回滚。虚拟滚动 的那次灰度让一线团队在凌晨两点避免了一次全量事故。
SEC.06检查清单
- 军规:千项列表需要虚拟滚动,渲染节点封顶,违者打回
- 铁律:200 项以上列表强制虚拟滚动,写进验收单
- 铁律:滑块端点吸附并实时回显当前值,写进验收单
- 底线:禁用态全部补 tooltip 说明原因,违者打回