在 touchstart/touchend 事件中,应通过 event.touches 获取当前所有活跃触点坐标:event.touches.length 表示按在屏幕上的手指数量,遍历每个 Touch 对象的 clientX/clientY 可得各手指位置。

在 JavaScript 的触控事件中,touchstart 和 touchend 本身不直接提供“多点触控坐标”,而是通过事件对象的 touches 属性返回当前所有**仍在接触屏幕的触点列表**(TouchList)。要获取多点触控坐标,关键在于正确读取 event.touches(而非 event.targetTouches 或 event.changedTouches),并遍历其中每个 Touch 对象的 clientX/clientY、pageX/pageY 等属性。
touchstart/touchend 中获取所有活跃触点坐标
touchstart 触发时,event.touches 包含所有当前已按下但尚未抬起的触点;touchend 触发时,该列表会自动剔除刚刚抬起的那个触点(即只保留仍按着的点)。因此,若想获取“此刻屏幕上所有手指的位置”,应始终读取 event.touches:
-
event.touches.length表示当前有多少根手指按在屏幕上 - 遍历
for (let i = 0; i ,对每个 <code>event.touches[i]取clientX/clientY(相对于视口)或pageX/pageY(相对于整个页面) - 注意:
event.changedTouches在touchend中只包含本次抬起的那一个触点,不能代表全部状态
区分 touches、targetTouches 和 changedTouches
三者容易混淆,实际用途不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
touches:当前所有活跃触点(全局视角),适用于判断多点总数量和位置 -
targetTouches:当前事件目标元素上所有的活跃触点(可能少于touches,比如有手指按在别的元素上) -
changedTouches:本次事件中发生变化的触点(touchstart中是新按下的点,touchend中是刚抬起的点),适合做单点响应或手势起点/终点记录
获取坐标的常见注意事项
触控坐标不是绝对像素值,需结合上下文使用:
立即学习“Java免费学习笔记(深入)”;
-
clientX/clientY是相对于浏览器可视窗口左上角,受滚动影响较小,适合与getBoundingClientRect()配合做元素内定位 -
pageX/pageY相对于整个文档左上角,包含滚动偏移,适合计算全局位置 - 移动端存在缩放(viewport scale)、CSS transform 或 fixed 定位,单纯用 client 坐标可能不准,必要时需用
element.getBoundingClientRect()校正 - 部分 Android 浏览器在快速多指操作时可能出现
touches短暂为空的情况,建议加空值判断
简单示例:打印所有触点坐标
以下代码在 touchstart 和 touchend 中实时输出所有当前触点位置:
element.addEventListener('touchstart', e => {
console.log(`当前 ${e.touches.length} 根手指按下:`);
Array.from(e.touches).forEach((t, i) => {
console.log(` 手指 ${i + 1}: (${t.clientX.toFixed(1)}, ${t.clientY.toFixed(1)})`);
});
});
element.addEventListener('touchend', e => {
console.log(`抬起后剩余 ${e.touches.length} 根手指:`);
Array.from(e.touches).forEach((t, i) => {
console.log(` 手指 ${i + 1}: (${t.clientX.toFixed(1)}, ${t.clientY.toFixed(1)})`);
});
});

















