远程控制输入细节:点击、滑动、键盘输入
坐标归一化原理
手机屏幕可能是 1080 × 2400,浏览器里的画布可能被你拉成 800 × 1600 的窗口。PlainApp 的做法:
- 浏览器事件拿到画布相对坐标(点击发生在画布 x=300, y=600)
- 除以画布实际尺寸 → 得到 0–1 之间的归一化坐标(300/800=0.375, 600/1600=0.375)
- 乘以手机实际分辨率 → 映射回手机屏幕坐标(405, 900)
- 发送给手机端,手机端模拟触控事件
这个流程确保:你在浏览器窗口里放大、缩小、甚至全屏切换,远程控制的点击始终对准手机上的正确位置。
点击、长按、滑动、滚动
| 浏览器操作 | 手机效果 | 触发方式 |
|---|---|---|
| 鼠标 / 触屏点一下 | 短按(tap) | mousedown → mouseup 间隔 < 400ms |
| 按住不动 | 长按(long press) | 按住 > 400ms 且不移动 |
| 按住拖动 | 滑动(swipe / drag) | mousedown → 拖动 → mouseup |
| 鼠标滚轮 | 上下滚动(scroll) | wheel 事件 |
| 触屏捏合 | 缩放(pinch / zoom) | 两个手指同时事件 |
键盘输入
当手机屏幕上有可聚焦输入框(比如 SMS 对话里的消息输入框、搜索框、笔记编辑器):
- 浏览器键盘事件会被转发到手机
- 中英文输入法切换 不 通过浏览器事件——手机端输入法自己处理
- 如果手机上没有任何输入框获得焦点,键盘事件会被忽略(不会"敲空处")
三大导航键
工具栏上三个常驻按钮——Back(◀)/ Home(■)/ Recents(☰)——点任意一个都会在手机上触发对应的 Android 系统动作:
- Back:回到上一级(应用内部返回键行为)
- Home:回桌面
- Recents:最近应用列表
这三个按钮独立于远程控制开关——就算 Remote Control 关掉了,它们依然可以用。
安全性
远程控制是显式开启的——点 Remote Control 开关才打开。关闭开关、或者 Stop 屏幕镜像、或者浏览器标签页关闭——远程输入立刻失效。
输入事件在手机端执行前还有一次坐标边界检查——如果算出来的手机坐标超出屏幕实际分辨率范围(极端窗口缩放导致的),会被丢弃,不会"点击到手机屏幕外"。