iter: d29 menu Home/End 跳转(与 select 键盘导航对称)
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "ui-arch-registry-index/0.1",
|
"$schema": "ui-arch-registry-index/0.1",
|
||||||
"generatedAt": "2026-10-23T09:11:22.226Z",
|
"generatedAt": "2026-10-23T09:12:34.151Z",
|
||||||
"repoRoot": ".",
|
"repoRoot": ".",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { effect, h, signal } from '@ui-arch/frame';
|
import { effect, h, signal } from '@ui-arch/frame';
|
||||||
import type { MenuItem, MenuProps } from './types.js';
|
import type { MenuItem, MenuProps } from './types.js';
|
||||||
|
|
||||||
/*** 下拉菜单:触发器 + 自绘弹层,项支持禁用 / 危险 / 分隔线;点项 / 点外部 / Esc 关闭,↑↓ 环形导航 ***/
|
/*** 下拉菜单:触发器 + 自绘弹层,项支持禁用 / 危险 / 分隔线;点项 / 点外部 / Esc 关闭,↑↓ 环形导航 + Home/End 跳转 ***/
|
||||||
export function menu(props: MenuProps): HTMLElement {
|
export function menu(props: MenuProps): HTMLElement {
|
||||||
// —— 状态集中声明 ——
|
// —— 状态集中声明 ——
|
||||||
const open = signal(false); // 弹层开合
|
const open = signal(false); // 弹层开合
|
||||||
@@ -61,6 +61,8 @@ export function menu(props: MenuProps): HTMLElement {
|
|||||||
trigger.focus(); // 收起后焦点回到触发器,键盘流不断
|
trigger.focus(); // 收起后焦点回到触发器,键盘流不断
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (e.key === 'Home' && open()) { e.preventDefault(); focusables[0]?.focus(); return; } // Home 跳首项
|
||||||
|
if (e.key === 'End' && open()) { e.preventDefault(); focusables[focusables.length - 1]?.focus(); return; } // End 跳末项
|
||||||
if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return; // 卫语句:只接管上下键
|
if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return; // 卫语句:只接管上下键
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (!open()) {
|
if (!open()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user