JavaScript多点触控通过TouchEvent的touches(全局触摸点)、targetTouches(目标元素内触摸点)和changedTouches(本次变化的触摸点)获取坐标,需结合identifier跟踪手指生命周期。

在 JavaScript 中处理多点触控时,事件对象本身不直接提供“所有触摸点”的坐标数组,而是通过 TouchEvent 对象的 touches、targetTouches 和 changedTouches 三个类数组属性来获取触摸点信息。关键是要监听正确的事件(如 touchstart、touchmove、touchend),并在回调中访问这些属性。
用 touches 获取当前所有活跃触摸点
event.touches 返回页面上所有正在接触屏幕的触摸点(不管是否在当前元素上),每个触摸点是一个 Touch 对象,包含 clientX、clientY、pageX、pageY、screenX、screenY 等坐标属性。
- 适用于需要全局触控状态的场景,比如手势识别或全屏拖拽
- 注意:该列表实时更新,手指增减都会触发新事件
- 示例:
const firstTouch = event.touches[0]; console.log(firstTouch.clientX, firstTouch.clientY);
用 targetTouches 只获取落在目标元素上的触摸点
event.targetTouches 是 touches 的子集,只包含那些初始接触点位于当前事件目标元素(即绑定事件的元素)上的触摸点。它更安全,避免跨元素干扰。
- 适合绑定在特定容器(如画布、滑动区域)上做局部多点操作
- 即使用户手指移到容器外,只要没抬起,该触摸点仍保留在
targetTouches中(直到touchend) - 推荐优先使用,逻辑更清晰、边界更明确
用 changedTouches 判断本次事件中变化的触摸点
event.changedTouches 包含本次事件中状态发生变化的触摸点:比如新按下(touchstart)、移动中(touchmove)、刚抬起(touchend)。它不一定等于 touches 或 targetTouches。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
touchstart时:新增的触摸点 -
touchmove时:位置发生变化的触摸点(可能全部,也可能部分) -
touchend时:刚刚离开屏幕的触摸点(此时已不在touches中) - 适合做精准响应,比如记录起始点、计算位移、识别单指/双指缩放
实际获取坐标的常用写法
为兼容不同需求,可统一提取坐标数组:
function getTouchPoints(event) {
return Array.from(event.touches).map(t => ({
x: t.pageX,
y: t.pageY,
id: t.identifier // 关键!用于跟踪同一根手指的生命周期
}));
}
identifier 属性非常重要:每个触摸点有唯一数字 ID,在整个触摸过程中保持不变,可用于区分手指、匹配起始与结束点、实现双指缩放等逻辑。
记得在移动端启用 viewport 缩放控制(如 <meta name="viewport" content="width=device-width, user-scalable=no">),并避免 touch-action: none 意外禁用默认行为。

















