我正在将HTML5应用程序的一段代码从iOS / Android移植到Windows Phone8。在此应用程序中,它具有包含许多元素的垂直滚动视图。
在原始应用程序中,我使用“ touchstart”和“ touchend”事件。这意味着每次用户触摸列表时,我都会得到一个touchstart事件,即使在滚动之后,当用户抬起手指时,我也会得到一个touchend。
MSPointer模型的工作原理有所不同。 MSPointerDown与touchstart完全等效,因此在这一点上没有问题。
不过,我无法理解如何为触摸端行为建模。 MSPointerUp是不够的,因为仅当用户将手指放在发生MSPointerDown的同一容器内时才抛出MSPointerUp。因此,如果用户触摸列表,然后向上滑动列表然后抬起手指,则不会触发该事件。还有一个MSPointerOut,它在用户离开触发了MSPointerUp的容器时触发,这里的问题是,它在容器离开后立即触发(因此在滚动列表期间),并且在用户抬起后不会触发它的手指。
我在这里有点迷茫,如何使用MSPointer建模“触摸端”,它将以与Webkit完全相同的方式触发。
干杯
汤姆
最佳答案
这就是我处理此问题的方式。
即使将Down / Move侦听器附加到某个元素,我仍将Up侦听器附加到窗口。
这意味着无论用户将手指/笔/鼠标放在屏幕上的哪个位置(甚至在PC上IE的浏览器窗口之外),都会触发Up事件。
这也意味着您必须通过一个函数处理应用程序中的所有Up事件。但是您可以在元素的Down事件上设置标志(某些全局变量),然后在UP事件中检查该标志。
对于PC网页上的鼠标事件,我已经做了很长时间了,以处理用户何时使浏览器窗口外的鼠标按钮松开。
当他们不这样做时,这很烦人,例如在Google Maps Street View中,您试图平移并不得不将鼠标移动很多,然后放开窗口外的按钮,但它仍然认为您在重新拖动。
关于javascript - MSPointer等同于“touchend”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21992234/