touchcancel事件和touchend事件有什么区别?

6
阅读完此event_touchcancel文档后:

当触摸事件被中断时,将会触发touchcancel事件。

不同设备在不同的动作下会中断触摸事件,如果出现这种错误,包含该事件以清理代码被认为是良好的做法。

并且阅读了w3c event-touchcancel。我仍然感到困惑。
“当触摸事件被中断”是什么意思?是否有特定情况会中断触摸事件?何时会触发touchcancel事件?

1
我看到这个重要的问题已经无人回答了6个月。希望有人能澄清这种情况。 - HolyResistance
1
w3schools是垃圾。你链接的官方规范说明事件表示“以实现特定的方式中断了触摸点”,甚至提供了例子,“例如...触摸点离开文档窗口进入非文档区域...”这似乎很清楚。 - miken32
2个回答

3
touchcancel事件在触摸事件被中断时发生。从语义上讲,它用于检测触摸点何时不再处于活动状态。触摸点可以通过多种方式被打断,例如:如果用户的手指从多点触摸活动状态的触摸屏上移除;如果用户突然切换到另一个应用程序或设备失去电源;如果用户的手指移动到浏览器窗口或他们正在交互的元素外部,以有效地防止用户意外地与目标以外的元素进行交互。在所有这些情况下,触摸点会被“打断”,应该触发touchcancel事件以处理接下来预期的行为。
在浏览器中的行为:
有一个Web API的W3C规范,但它完全依赖于实现。
示例实现如下,{{link1:touchCancel}} 是 {{link2:touchEvent}} 的子对象/类,后者是 {{link3:UIEvent}} 的子对象/类,由 WindowsEventDispatcher 处理。通过 gfx 回调助手 处理 取消触摸事件的示例。
同样,苹果公司有一个名为touchCancel的属性类型,定义为“取消控件当前的触摸事件系统事件”,并且它是UIControl 事件结构的子类/继承者。但是它还有更广泛的类型实现,例如当一个手指在控件的边界内拖动时(touchDragInside)。所有这些类型都列在这里
Chrome浏览器曾经使用touchEvents,例如touchCancel,用于触摸滚动和手势处理,但现在已不再这样做,而是采用了一个手势识别器在代码中进行处理。[1][2][3][code] 我找到了明确的开发者文档,说明何时在Apple中触发touchCancel相关事件。他们有预定义的类型和规范,说明何时使用它们。MDN有关于它们的类型UI事件的文档,但没有明确的规范说明何时使用它们。我找不到touchEvents的Chromium文档/规范,欢迎您探索代码
编辑:正确指定了一个示例并添加了一节。

第一种情况(用户的手指从触摸屏幕上移开)将触发touchend事件,而不是touchcancel事件。如果有文档记录哪些条件会在实际浏览器中触发此事件,这个答案可能更有用。 - miken32
1
是的,在这种情况下,touchEndtouchCancel更精确。我已经编辑并添加了一些浏览器信息。谢谢! - Jishan Shaikh

0

假设你有一个最多只能处理四个并发触摸的设备。如果用户添加了一个拇指,也就是第五个触摸开始了,会发生什么?设备可以选择忽略新的第五个触摸,或者放弃之前的某个触摸以记录新的触摸。如果要放弃先前正在进行的触摸以记录新的触摸,则设备可能会触发touchcancel事件。这与touchend事件明显不同,因为它不是由用户引起的。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

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