Appearance
滑出式菜单引擎(SlideMenu)
系统概览
核心菜单引擎:SlideMenu 类。管理弹窗的层级栈(PopupLevel)、容器/视口/面板/头部,处理键盘导航、触屏滑动手势、过渡动画与 dispose 清理。所有 UI 控件(slideRow/addSliderRow 等)在渲染时经 getCurrentRenderingMenu() 自动注册到当前菜单实例。
核心职责
SlideMenu—levels栈、container/viewport/panel/headerEl、焦点索引focusIndex、过渡锁transitioning- 渲染上下文栈
_renderingStack+getCurrentRenderingMenu()— 供 ui-helpers 控件函数自动注册到当前菜单 - 资源清理:
_pendingTimeouts(cancelAnims 清除)、_keydownHandler、_swipe*Touch*Handler在 dispose 释放,避免监听器泄漏 - RAF 去抖
_reRenderPending;头部额外按钮缓存_cachedExtraBtns避免每次重建 - 过渡时长常量(与 app.css
--menu-transition-duration同步):0.15s / 0.12s
对外 API(节选)
class SlideMenu—push(level)/pop()/updateControls()/dispose()getCurrentRenderingMenu(): SlideMenu | null
关键约定
- dispose 必须释放 keydown / 触摸监听器 / 未决 timeout,杜绝 HMR 与多次开关的监听器泄漏
- 过渡期间
transitioning锁防止动画竞态
与其他子系统关系
- 控件函数来自
core/ui-helpers(自动注册到当前 SlideMenu) - 状态订阅经
core/reactivity(subscribe) - 由
menu-factory.ts/menu-schema.ts创建的菜单实例驱动
UI 入口
- 菜单层级 / 入口函数 / 快捷键统一由 menu-map.md 机器生成(勿手改)。
- 运行时动态生成的菜单项(renderCustom / slideRow 等)无法静态提取,缺口由本卡正文说明。