Files
remoteconn-gitea/TOP_LEVEL_CONSTRAINTS.md
2026-03-21 18:57:10 +08:00

3.9 KiB
Raw Permalink Blame History

移动端终端交互顶级约束 (Mobile Terminal Top-Level Constraints)

本文档定义了 remoteconn 移动端终端界面的**“四大不可回归”顶级约束**。在未来任何针对 CSS、JS 逻辑、甚至 Xterm.js 版本升级的修改中,都必须且优先满足以下条件。

任何破坏以下任一体验的代码修改,都视为 核心体验回归 (Critical Regression),禁止合入。


🛑 约束 1正常的软键盘弹出与收回 (Keyboard Lifecycle)

用户的输入意图必须被绝对尊重,不能因为防阻断逻辑导致系统键盘失灵或无法正常收起。

  • 约束标准
    • 点击终端内最后一行空白处或已有文本,必须能够迅速唤起原生软键盘。
    • 在唤起状态下,可以通过 UI 按钮或符合常理的操作顺畅收起键盘,而不引起全屏闪烁或虚假重绘。
  • QA 测试用例 (Test Case 1)
    1. 在手机浏览器中打开终端。
    2. 短按屏幕输入区,验证:系统软键盘立刻出现。
    3. 点击顶部工具栏的隐藏键盘按钮/或进行收起手势,验证:软键盘顺利降下,终端不触发无关的字符输入或选中。

🛑 约束 2原生且丝滑的滚动 (Native-like Smooth Scroll)

无论渲染层多么复杂(海量 span/div 标签),滑动都必须 1:1 跟手,并保留操作系统级的惯性阻尼。

  • 约束标准
    • touchmove 事件绝不能由于 OS 原生手势侦测而在中途被无故截断Frozen Screen
    • 松开手指后必须有自然的衰减惯性滚动。
  • QA 测试用例 (Test Case 2)
    1. 打印一长串历史构建输出(如 ls -la /dmesg)。
    2. 手指在屏幕上连续、快速且不离开屏幕地上下来回拖拽。验证:无论速度多快,列表紧跟指尖,没有丝毫卡顿或断流。
    3. 快速向上一划并立刻松手。验证:列表如原生 App 一样继续依靠惯性顺滑滚动,直至自然停止。

🛑 约束 3完整的长按选中功能 (Long-Press Text Selection)

滚动优化和事件劫持不能杀灭系统底层的文本选取工作流。

  • 约束标准
    • 在触摸初始阶段 (touchstart / pointerdown) 绝对不滥用 preventDefault 导致 OS 选区定时器失效。
    • 一旦触发选区,一切系统原生拖拽行为享有最高优先级,防劫持和自定义滚动必须全面让路。
  • QA 测试用例 (Test Case 3)
    1. 在终端中找到一段带颜色的日志文本。
    2. 手指长按某个单词,验证:出现 iOS/Android 原生放大镜,并且选中该词(高亮或系统菜单出现)。
    3. 拖拽选区两端的“小拉手”扩大选中范围,验证:选区顺利扩大,且此时不应该误触发页面的大幅度重新滚动。

🛑 约束 4键盘唤起/收回期间光标与命令行的正确位置 (Viewport Pinning during Transitions)

当可视区域 (Visual Viewport) 受到物理屏幕与虚拟键盘挤压变化时,我们必须保证用户正在操作的焦点不丢失。

  • 约束标准
    • 软键盘弹出的瞬间,终端内部高度与排版自动重调,强制将当前活动命令行 (光标所在行) 顶出至可视范围内(浮于键盘正上方)。
    • 软键盘收回时,恢复之前的满铺视图高度,且当前输入行依然停留在舒适可见范围内,不会沉入看不见的“黑洞(屏幕下方)”。
  • QA 测试用例 (Test Case 4)
    1. 屏幕充满日志内容后,最下面的一行是当前的 Shell 提示符 $
    2. 短按唤起键盘,此时屏幕下半部分被键盘遮挡。
    3. 验证:整个终端内容自动缩紧或向上推移,最后那行 $ 以及光标刚好贴在这个物理键盘的顶部,能清晰看见输入的内容。
    4. 顺势收回键盘,验证:屏幕重新展平,最后一行依然保留在屏幕最下方,并未丢失位置。