真机测试是触控交互开发的唯一可靠方式——模拟器无法还原真实触控延迟、误触率和焦点环行为,尤其在低端安卓或折叠屏设备上,touchstart 响应偏差可达 42ms,且 Inspect 悬停检测会漏掉 90% 的交互断裂点。

直接在真机上点,别信模拟器——浏览器开发者工具的“设备模拟”模式无法还原真实触控延迟、误触率和焦点环行为,尤其在低端安卓机或折叠屏上,touchstart 响应偏差可达 42ms,仅靠 Inspect 悬停检测会漏掉 90% 的交互断裂点。
用真机跑 getBoundingClientRect() 验证可触区域尺寸
视觉上看着够大的按钮,实际 clientWidth × clientHeight 可能不到 48×48px。CSS 的 padding 或 font-size 不等于物理可触面积,必须实测:
- 打开真机 Chrome 或 Safari,在控制台执行:
document.querySelector("button").getBoundingClientRect() - 检查返回对象的
width和height是否都 ≥ 48;若图标按钮只靠尺寸撑开,大概率不达标 - 相邻可触元素间距离也要测:用
getBoundingClientRect()算两个按钮右左边界差值,确保 ≥ 8px,否则 iOS VoiceOver 滑动时会连跳
监听 pointer 和 hover 媒体查询变化,而非依赖 ontouchstart
ontouchstart 在桌面端插触摸屏(如 Surface)、PWA 全屏模式下会误触发;而 (pointer: coarse) + (hover: none) 组合才是 W3C 推荐的输入能力探测方式:
实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。
- 初始化时用
window.matchMedia("(pointer: coarse) and (hover: none)")判断当前是否为纯触控上下文 - 必须绑定
change事件监听器,因为用户可能热插拔鼠标或折叠双屏设备,静态判断会失效 - 避免在 JS 中写
if ("ontouchstart" in window)—— 它在 macOS Safari 上永远返回true,即使没触摸屏
结构上禁用 div 伪装按钮,强制用原生语义标签
DOM 层级再浅, 最常被忽略的是 DOM 深度——超过 6 层嵌套时,:active 或键盘 Enter。这不是样式问题,是语义缺失导致的系统级反馈通道关闭:
、 或 ,哪怕只是调用 onclick="toggleMenu()"
role="button":它不自动获得焦点,不触发 keydown,在微信 X5 WebView 中完全无响应DocumentFragment 批量 append,避免循环 appendChild 触发多次 layout,拖慢触控响应touchstart 冒泡路径变长,任意一层设了 pointer-events: none 就会截断事件。真机上测不出的问题,往往就卡在这层看不见的包裹里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










