e.touches、e.targetTouches和e.changedTouches的变化

71

假设我正在监听 body 元素上的 touchstarttouchmovetouchend 事件。

请告诉我,如果我错了,请问 e.touchese.targetTouches 是一样的吗?如果是这样,e.changedTouches 又如何与它们有关呢?

我的意思是,在某个特定的时刻,只有一个触摸事件,我获取该触摸事件并解析它。在我的经验中,所有三个触摸变量都是相同的。

我必须将解析后的数据发送到服务器上,但发送三次完全相同的字符串很冗长,是否有任何方法只发送一次并在服务器端以编程方式复制触摸事件?

1个回答

238
我们有以下几个列表:
  • touches: 包含当前屏幕上每个手指的信息列表
  • targetTouches: 与 touches 类似,但仅包含在同一节点内开始触摸的手指信息
  • changedTouches: 包含事件中涉及到的每个手指的信息列表
为了更好地理解这些列表可能包含的内容,让我们快速列举一些例子。它们遵循以下规则:
  • 当我放下一个手指时,所有三个列表都会有相同的信息。信息将出现在 changedTouches 中,因为放下手指是导致事件发生的原因
  • 当我放下第二个手指时,touches 将有两个项目,每个手指一个项目。仅当第二个手指放在与第一个手指相同的节点中时,targetTouches 才会有两个项目。changedTouches 将包含与第二个手指相关的信息,因为它是导致事件发生的原因
  • 如果我同时放下两个手指,changedTouches 可能会有两个项目,分别对应每个手指
  • 如果我移动手指,唯一会改变的列表是 changedTouches,其中包含与移动了的手指相关的信息(至少一个手指)
  • 当我抬起一个手指时,它将从 touchestargetTouches 中删除,并出现在 changedTouches 中,因为它是导致事件发生的原因
  • 如果我移除最后一个手指,touchestargetTouches 将为空,而 changedTouches 将包含最后一个手指的信息

4
你能解释一下“node”这个术语的含义吗? - Martin
1
这些信息适用于所有设备吗,例如 Android 和 Safari 环境? - David
当你附加到 touchmove 时,似乎也可以获取 e.touches 的更新,即 e.touches[0].pageX 更新。是否存在这种情况不起作用? - Matt
它们可能应该是相同的。我猜,用 '''touchmove''',改变'''changedTouches'''的方式是不同的。 - Andrei Zisu
如果你在移动一个已经按下的手指的同时,又放下了一个新的手指(touchstart),那么这两个事件都会出现在changedTouches中吗? - B T
我猜测浏览器将会触发两个不同的事件。这是对我来说最有意义的。 - Andrei Zisu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接