配置 focuz 会涉及到入口、出口和列表,这三个概念和字面一样好理解。想象要实现一个弹窗组件,首先要触发一个按钮打开弹窗,这个按钮是入口;打开弹窗之后按下 Tab 或 Shift-Tab 从而在弹窗里导航,导航到的元素们是列表;最后在“关闭”按钮上按下空格或回车,弹窗关闭,这个“关闭”按钮是出口。
focuz 的特性:
- 嵌套的聚焦结构;
- 灵活、方便的入口与出口:
- 多入口、多出口;
- 开关入口、封面入口;
- 蒙层和 Esc 出口;
- 调用式的入口与出口。
- 安全、灵活的列表:
- 范围列表、固定列表和动态列表;
- 无需入口的溯溪列表;
- 焦点矫正与焦点保护;
- 自定义导航组合键;
- 延迟聚焦与失焦,支持指定初始焦点。
- 导航前执行的钩子;
- 兼容鼠标聚焦行为。
TODO:
- 特性——悬浮聚焦;
- 特性——通过插件将范围模式转为序列模式;
- 优化——入口与出口的 type 选项;
- 优化——范围列表焦点矫正;
- 优化——通过元素寻找列表;
- 优化——组合键字符串;
- 优化——参数整理与简化;
- 优化——listsInfo 的 wrap 依赖移除。
基本入参结构:
{
"root": "#app",
"entry": "#en1",
"exit": "#ex1",
"list": [
"#i1",
"#i2",
"#i3"
],
"sub": {
"entry": "en2",
"exit": "#ex2",
"list": {
"nodes": ["#i_start", "#i_end"],
"range": true
}
}
}