示例与场景
仓库里有六个示例页,都是纯 HTML + 一个 UMD 包,不用打包工具就能打开看效果。 它们同时也是这套组件库的“验收现场”:每页都配了浏览器 QA 脚本(见测试)。
npm run build # 先产出 dist/(示例页引用 ../dist/index.umd.js)
# 然后直接用浏览器打开,或起个静态服务器
npx serve .
| 示例 | 场景 | 主要用到的东西 |
|---|---|---|
gallery.html | 组件总览(一个个组件排开) | 几乎全部组件 + 引擎布局器驱动的「簇 + 货架」流式布局 |
admin.html | 后台管理(6 页业务闭环) | 布局外壳、表格、表单、浮层、分栏、日历、引导… |
workbench.html | 客服工单工作台(三栏高频操作) | ICESplitter、ICEList、ICEComment、ICETimeline… |
custom-component.html | 自己写组件并接进体系 | ICEWidget + 表单/焦点/主题约定 |
theme-scope.html | 局部主题作用域(浅色页面里嵌深色面板、反向同理) | themeScope() + props.theme 作用域链,painter 型组件也跟随 |
windows-xp.html | 全屏 Windows XP 桌面(好玩的那一个) | ICEWindow、ICEIconTile + 几乎全套组件 |
arcade.html | ICE Arcade 掌机(小游戏合集:俄罗斯方块 + 贪吃蛇 + 2048 + CHIP-8 虚拟机) | ICETetrisModel / ICESnakeModel / ICE2048Model / ICEChip8Model(纯逻辑)+ 自绘棋盘/HUD,键盘全接管 |
pixel-editor.html | 像素画板(画 / 撤销 / 导出 PNG、SVG) | ICEPixelModel + ICEHistoryModel(纯逻辑)+ 单节点自绘画布,导出走模型 |
algorithm-sandbox.html | 算法沙盒(排序 + 寻路可视化) | ICETracePlayerModel 回放 + ICESortModel / ICEMazeModel 产帧,画面是 ICETileMap |
dos-terminal.html | ICE-DOS 终端(能敲命令) | ICEDosModel(虚拟文件系统 + 命令解释器)+ ICEScrollPane 输出区 |
demo 套件总览:九套示例页按场景类别分组的导航图。

一、gallery.html:组件总览
一页把库里能独立展示的组件都摆出来,用来快速“看长相、点交互”。
- 布局是 cluster + 货架(每个簇是一个容器节点,簇内保持局部坐标、整体平移),
排布交给引擎:簇区
ICEFlowLayout({ pack: 'first-fit' })、版块与整页ICEBoxLayout(axis:'y')。 思路与代码骨架见画布内布局; - 加新组件时:在对应
sections里加一项、给它一个id,然后在scripts/qa-gallery.mjs里补一条断言即可。
虚拟列表那一格值得单独看一眼:里面塞了 10000 行订单,但画布上真正存在的 只有 12~15 个节点(可视区 + 上下缓冲各 2 条)—— 这就是「大数据量」的正解: 内容盒按总高度撑开保证滚动条对得上,滚动时换窗口、节点复用。 窗口计算是纯函数
computeVirtualRange(缓冲、贴底、空列表、越界都在单测里守着), 组件ICEVirtualList只负责把窗口映射成节点。qa:gallery里三条断言分别验证 「一万行只渲染可视区」「真实滚轮滚动后窗口跟着换」「scrollToIndex跳到最后一万条」。同一页的「表格」那格开了
resizable:拖表头边界就能缩列(最小 70px 夹住, 拖过头也不会把列拖没),拖完其余自动列会 重新分配。列宽求解同样是纯函数resolveColumnWidths,交互那条链路由 QA 用真实鼠标拖出来。树那一格开了
draggable:节点可以拖动跨层级重排(上 1/3 插前面、中 1/3 放进去、 下 1/3 插后面),拖进自己的后代会被拒绝,落下抛nodedrop。页面里还接了国际化:
setICELocale('en-US')之后重建的组件用英文文案(表格空态、 弹窗按钮、上传提示、引导按钮……都走t()),切回zh-CN即恢复。页面末尾还挂了无障碍镜像层:
mountICEAccessibilityMirror(ice)把 canvas 里 「有哪些控件、叫什么名字、在什么位置」渲染成透明但真实存在的 DOM(role/aria-label/tabindex),点它等于点画布组件、focus 也会映射回组件 —— 屏幕阅读器和键盘用户才够得着 canvas UI(canvas 本身对辅助技术完全不可见)。「表格」那格还开了
rowDraggable:按住行上下拖就能排序,拖动时有落点指示线, 松手抛rowreorder(分页表拖的是当前页内的行,内部会换算成绝对下标)。再往上一格是 「宽表」:一万行 × 20 列,开了
virtual: true并把前两列标成fixed。 结果就是——表体只渲染 11~13 行(可视区 + 缓冲),横向滚动时前两列钉在左边不动, 表头跟着表体一起横向滚,滚轮/scrollToRow都能用。表格为此多了一条「可滚动模式」 渲染路径(表头与表体各一个ICEScrollPane+ 冻结层),旧的简单路径原样保留, 所以现有几十处小表用法一点没变。
二、admin.html:后台管理(6 页)
一个虚构的「ICE Shop」后台:仪表盘 / 订单管理 / 履约中心 / 商品管理 / 客户管理 / 设置。 它不是“控件陈列”,而是把组件放进真实业务流里:
| 页面 | 业务动作 | 用到的组件(节选) |
|---|---|---|
| 仪表盘 | 看指标、处理待办、盯库存、看最近订单 | ICEStatCard、ICEStatistic(倒计时)、ICEProgressBar、ICECheckboxGroup、ICETable + 分页、ICEWatermark、ICECarousel |
| 订单管理 | 筛选(关键字/区域/金额区间/只看异常)→ 勾选多行 → 批量发货 / 删除 / 导出 | ICESegmented、ICESlider(区间)、ICECheckboxGroup、ICESwitch、ICETable(多选 + 分页)、ICEPopconfirm、ICEDropdown |
| 履约中心 | 派单队列 → 看详情 / 物流轨迹 → 催办 | ICESplitter、ICEList、ICEScrollPane、ICEAnchor、ICEDescriptions、ICETimeline、ICEComment |
| 商品管理 | 上架/预售、改折扣、传主图、看大图预览 | ICEUpload、ICEImagePreview、ICERadioGroup、ICESlider、ICETree、ICECascader、ICEColorPicker、ICETransfer |
| 客户管理 | 看档案、跟进记录、打分、打标签 | ICEList、ICEDescriptions、ICETimeline、ICEComment、ICERate、ICECheckboxGroup、ICEStatistic |
| 设置 | 改资料 / 安全 / 通知偏好 / 业务偏好(含跨字段校验) | ICEForm、ICEFormItem、ICETabs、ICETransfer、ICERadioGroup、ICESlider、ICECheckboxGroup、ICEAlert |
外壳本身也用了不少东西:侧边栏 ICEMenu(带二级菜单)、面包屑 ICEBreadcrumb、
顶部搜索 ICEAutoComplete、通知 ICEBadge + ICEDropdown、右下角 ICEFloatButton
(新建订单 / 导出 / 新手引导)、ICEBackTop、首次进入的 ICETour 四步引导。

| 订单管理 | 履约中心 |
|---|---|
![]() | ![]() |
三、workbench.html:客服工单工作台
**刻意做成“非后台列表”**的第二种场景:三栏、高频、以会话为中心。

