iter(g23): tabs 支持 Home/End 跳转首末页签
This commit is contained in:
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "ui-arch-registry-index/0.1",
|
"$schema": "ui-arch-registry-index/0.1",
|
||||||
"generatedAt": "2026-10-26T03:13:07.810Z",
|
"generatedAt": "2026-10-26T03:31:05.626Z",
|
||||||
"repoRoot": ".",
|
"repoRoot": ".",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
@@ -1183,8 +1183,8 @@
|
|||||||
"steps": [
|
"steps": [
|
||||||
"创建信号 tab = signal('a'),初值为默认页签",
|
"创建信号 tab = signal('a'),初值为默认页签",
|
||||||
"tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB",
|
"tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB",
|
||||||
"点击或方向键(←→ 环形)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点",
|
"点击或方向键(←→ 环形)、Home/End(直达首/末页签)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点",
|
||||||
"键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动"
|
"键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动,Home/End 跳首个/末个启用页签"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
# @ui-arch 组件库 Agent 文档(无图形版)
|
# @ui-arch 组件库 Agent 文档(无图形版)
|
||||||
|
|
||||||
> 自动生成于 2026-10-26T03:13:07.810Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
> 自动生成于 2026-10-26T03:31:05.626Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
||||||
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
||||||
|
|
||||||
## 快速上手
|
## 快速上手
|
||||||
@@ -655,8 +655,8 @@ const tab = signal('a'); tabs({ tabs: [{ value: 'a', label: '概览' }, { value:
|
|||||||
|
|
||||||
1. 创建信号 tab = signal('a'),初值为默认页签
|
1. 创建信号 tab = signal('a'),初值为默认页签
|
||||||
2. tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB
|
2. tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB
|
||||||
3. 点击或方向键(←→ 环形)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点
|
3. 点击或方向键(←→ 环形)、Home/End(直达首/末页签)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点
|
||||||
4. 键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动
|
4. 键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动,Home/End 跳首个/末个启用页签
|
||||||
|
|
||||||
现场演示:apps/docs/demo.html#sec-tabs-modal
|
现场演示:apps/docs/demo.html#sec-tabs-modal
|
||||||
|
|
||||||
|
|||||||
@@ -38,15 +38,16 @@ export function tabs(props: TabsProps): HTMLElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
head.addEventListener('keydown', (e: KeyboardEvent) => {
|
head.addEventListener('keydown', (e: KeyboardEvent) => {
|
||||||
const delta = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0;
|
const delta = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0; // 方向键步长
|
||||||
if (!delta) return; // 卫语句:非方向键放行
|
const edge = e.key === 'Home' ? 'first' : e.key === 'End' ? 'last' : ''; // 首/末页签直达
|
||||||
|
if (!delta && !edge) return; // 卫语句:非导航键放行
|
||||||
const list = buttons.filter((b) => !b.disabled);
|
const list = buttons.filter((b) => !b.disabled);
|
||||||
const i = list.indexOf(document.activeElement as HTMLButtonElement);
|
const i = list.indexOf(document.activeElement as HTMLButtonElement);
|
||||||
if (i < 0) return; // 卫语句:焦点不在页签上
|
if (i < 0) return; // 卫语句:焦点不在页签上
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const next = list[(i + delta + list.length) % list.length]; // 环形移动
|
const next = delta ? list[(i + delta + list.length) % list.length] : edge === 'first' ? list[0] : list[list.length - 1]; // 环形移动 / Home-End 直达
|
||||||
next.focus();
|
next?.focus();
|
||||||
next.click();
|
next?.click();
|
||||||
});
|
});
|
||||||
|
|
||||||
effect(sync);
|
effect(sync);
|
||||||
|
|||||||
@@ -1054,8 +1054,8 @@
|
|||||||
"steps": [
|
"steps": [
|
||||||
"创建信号 tab = signal('a'),初值为默认页签",
|
"创建信号 tab = signal('a'),初值为默认页签",
|
||||||
"tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB",
|
"tabs 只渲染页签头;页签内容用响应式函数按信号切换,如 () => tab() === 'a' ? panelA : panelB",
|
||||||
"点击或方向键(←→ 环形)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点",
|
"点击或方向键(←→ 环形)、Home/End(直达首/末页签)切换,滑动指示条自动跟随;disabled: true 的页签置灰不可点",
|
||||||
"键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动"
|
"键盘可访问:Tab 聚焦激活页签,←→ 在启用页签间环形移动,Home/End 跳首个/末个启用页签"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user