专业词汇字典 · 导航状态机设计方案

版本 v1.4.0(候选) · 2026-08-06 · 小八弟制作 · 待春哥拍板(本页为一次性分享,阅后自动关闭)

一、背景:当前导航逻辑的问题

前一轮上线了「分类标签 chips + 双下拉 + 阅读器(左右滑切条)」。但春哥一眼看出分类条目选择框和标签内项目操作逻辑有断层。我把真实代码(《gen_vocab.py》的 FILTER_JS / 阅读器 RD 对象)的状态机画出来,确认有 4 个毛病:

图1 · 现状导航状态机(存在问题 P1–P4)
网格状态activeCat / q / limit卡片网格过滤后显示阅读器 RD.open(id)cid = TERM_CAT[id](钉死分类)ids = TERM_DATA[cid]阅读器内next/prev 循环切chip/搜/limit点卡片/选下拉/目录树左滑/右滑/←→Esc 关闭P1(最致命):All 模式下阅读器被钉死在「打开词自身分类」,左右滑只能在该分类内打转,永远滑不到其他 5 类。P2:阅读器无视搜索 q 与显示数 limit,顶部计数取全量,与屏幕上看到的条数对不上。P3:下拉框单向——applyFilter 每次清空 termSel,RD 从不回填 → 选框与阅读器失联。P4:由 P1 推出,All 模式物理上无法跨分类滑动。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

二、修正总思路:activeCat 是唯一真相源 → 双轴派生

activeCat 立为唯一真相源,由它决定阅读器走哪根轴:

同时修掉 P2/P3:RD.open(id) 看当前 activeCat 定起点;RD.render 末尾把当前词回写 termSel.value,下拉框与阅读器双向同步

图2 · 修正模型:双轴决策(activeCat 派生阅读器走哪根轴)
当前 activeCat(唯一真相源)activeCat== 'all' ?分类轴navList = 6 个分类左滑/→ = 切下一个分类条目轴navList = 该分类词条左滑/→ = 下一条阅读器 open / next / prevEsc 关闭RD.render 回写 termSel(双向同步:选框 ↔ 阅读器)关闭是(全部)否(具体分类)左滑/→ 切分类左滑/→ 上下条render 后回写下拉Esc核心修正:activeCat 是唯一真相源。All → 走「分类轴」(左右滑=切标签页);指定分类 → 走「条目轴」(左右滑=上下条)。RD.open 看 activeCat 定起点,RD.render 回写下拉框,解决 P1/P3。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

三、两个待定子项 → 4 个组合方案

双轴模型定了,但有两处细节要你拍板(见下方对比表):

① All 模式左右滑切分类时,网格「全部」标签要不要跟着跳?
· A(我倾向):阅读器内部切分类,网格保持"全部"不动——最不打断你正在看的完整列表。
· B:滑动时连网格 chip 高亮也跳到具体分类(相当于退出"全部"视图)。

② All 模式每一"页"显示什么?
· A(我倾向):显示该分类的首条词(按频次排第一),和条目模式视觉一致。
· B:显示「分类标题 + 该类全部词条」一整页。

方案①A②A

图3 · 方案①A②A(网格不动 · 每页首条)
网格(全部)芯片高亮保持「全部」滑动时网格不动阅读器·分类轴当前 = 分类 k 的「首条」词(按频次排第一)左滑/→→ 分类 k+1 首条右滑/←→ 分类 k-1 首条指定分类模式条目轴:上/下一条(网格仍显示全部)Esc 关闭打开任一词左滑/→右滑/←切具体分类 chipEsc①A:滑动只在阅读器内部翻类,网格「全部」视图不被打断,最不影响你正在看的完整列表。②A:每页显示该分类的「首条」词(频次第一),与条目模式视觉一致,滑动即翻到下一类的头牌。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

方案①A②B

图4 · 方案①A②B(网格不动 · 每页整类词条)
网格(全部)芯片高亮保持「全部」滑动时网格不动阅读器·分类轴当前 = 分类 k(标题 + 该类全部词条)左滑/→→ 分类 k+1右滑/←→ 分类 k-1指定分类模式条目轴:上/下一条(网格仍显示全部)Esc 关闭打开任一词左滑/→右滑/←切具体分类 chipEsc①A:网格不动(同上)。②B:每页展示该类「完整词条列表」(而非仅首条),适合通读整类;但单页信息量更大、滑动更像翻章。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

方案①B②A

图5 · 方案①B②A(网格跟随翻类 · 每页首条)
网格随阅读器跳到具体分类(离开「全部」视图)阅读器·分类轴当前 = 分类 k 首条网格 chip 同步高亮 k左滑/→→ 分类 k+1(网格跟随)右滑/←→ 分类 k-1(网格跟随)Esc 关闭打开任一词左滑/→右滑/←Esc①B:滑动即把网格也切到该分类,相当于在阅读器里「翻标签页」且网格同步高亮——最贴近你说的"全选=左右滑切标签页"。②A:每页显示该分类首条词。注意:①B 一旦滑动,网格即离开「全部」视图,不再是完整列表。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

方案①B②B

图6 · 方案①B②B(网格跟随翻类 · 每页整类词条)
网格随阅读器跳到具体分类(离开「全部」视图)阅读器·分类轴当前 = 分类 k(标题 + 该类全部词条)左滑/→→ 分类 k+1(网格跟随)右滑/←→ 分类 k-1(网格跟随)Esc 关闭打开任一词左滑/→右滑/←Esc①B + ②B 组合:网格跟随翻类(离开「全部」视图)+ 每页展示整类词条。信息最全、翻类最彻底,但单页最长、且滑动会打断「全部」视图。
颜色:橙=分类轴 · 绿=条目轴 · 蓝=双向同步 · 红=问题/关闭 · 灰=常规

四、四方案对比

方案① 网格是否跟随翻类② 每页内容优点代价
①A②A否(保持全部)该分类首条不打断完整列表;翻类即看头牌,最轻量看不到整类全貌
①A②B否(保持全部)整类词条不打断列表;单页能看到整类单页信息量大
①B②A是(离开全部)该分类首条最贴近"全选=切标签页",网格同步滑动即打断"全部"视图
①B②B是(离开全部)整类词条翻类最彻底、信息最全单页最长;打断"全部"视图

五、我的推荐与待拍板

小八弟推荐:①A②A。理由——你前面强调"全选=左右滑切标签页",①A 用阅读器内部切分类来兑现这个语义,同时网格"全部"视图保持不动,不破坏你正在看的完整列表;②A 每页首条和条目模式视觉一致、滑动最轻量。

但如果你要的是"真的把网格也一起翻"(滑动时顶部 chips 高亮也跟着跳到具体分类),那就选 ①B。两者只是"网格跟不跟随"的差异,阅读器的切分类语义完全一致。

请你拍板两点:①选 A 还是 B?②选 A 还是 B? 我据此改 gen_vocab.py + 同步 test_vocab.py/test_reader.mjs(补"All 模式切分类""双向同步"断言)+ 重建部署(URL 不变)+ 说明书升正式 v1.4.0。依旧先测后上。

⬇ 下载 PDF 本页将在 后自动关闭