touchstart和touchmove之间的iOS延迟?

Posted

技术标签:

【中文标题】touchstart和touchmove之间的iOS延迟?【英文标题】:iOS Delay between touchstart and touchmove? 【发布时间】:2012-04-04 11:07:45 【问题描述】:

我正在尝试将我的网络应用程序转换为移动设备可以使用的形式。我正在尝试构建对水平滚动等触摸手势的支持。我在我的应用中发现了一些奇怪的行为。

我使用 touchstart 事件开始手势,然后在 touchmove 上滚动。但是,我的应用程序在接收这两个事件之间看到了 500-700 毫秒的延迟。据我所知,我的应用在这两个事件之间没有做任何其他工作。

其他方面: 代码用jquery编写,使用

  $(element).bind(touchmove, function(ev) return myobject.DoTouch(ev)  

DoTouch 命令是否只是检查 ev.type、记录触摸位置并返回 false。

我应该寻找什么来尝试解决这个问题?触摸和从应用程序获得响应之间的延迟非常烦人。

【问题讨论】:

您是否仅通过 ios 模拟器对其进行测试?我很确定它故意增加了延迟。 【参考方案1】:

是的。事实证明,这就是 iOS 的工作方式。我把自己的头发拉了一段时间。在此处阅读更多信息:http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html。从本质上讲,如果 iOS 认为它可以将其作为内部 PAN 手势来处理,它会发送并且根本不会发送touchmove 事件。

在我的项目中,我发现如果查看者非常刻意地做出 touchmove 手势,并且在移动结束时抬起手指之前暂停了一段时间,那么touchmove 事件实际上是按可能发送的预计。因此,记录在案的行为可能与实际情况有些不同,这只会增加混乱和我的调试工作。

无论如何,如果 iOS 在内部将事件处理为 PAN 手势,它将在 touchend 之前发送 scroll 事件。在我的项目中,我能够使用它来设置我用来区分拖动手势的标志(通常在我的 touchmove 处理程序中发送)并忽略独立触摸端处理程序中与我自己的处理无关的任何行为滚动处理。

我希望这对您(和其他人)也有帮助!

【讨论】:

以上是关于touchstart和touchmove之间的iOS延迟?的主要内容,如果未能解决你的问题,请参考以下文章

touchstart,touchmove判断手机中滑屏方向

touchstart,touchmove判断手机中滑屏方向

touchstart,touchmove,touchend事件 写法

JQuery 获取touchstart,touchmove,touchend 坐标

如何解决这个关于touchmove与touchstart事件问题

移动端事件(touchstart+touchmove+touchend)