iOS触摸屏幕的touchstart和touchmove之间有延迟吗?

3
我正在尝试将我的Web应用程序转换为可在移动设备上使用的表单。我正在尝试构建支持类似水平滚动的触摸手势的功能。我发现我的应用程序出现了一些奇怪的行为。
我使用touchstart事件开始手势,然后在touchmove上滚动。但是,我的应用程序在接收这两个事件之间看到了500-700毫秒的延迟。据我所知,在这两个事件之间,我的应用程序没有进行任何其他工作。
其他方面: 代码是使用jquery编写的。
  $(element).bind(touchmove, function(ev) {return myobject.DoTouch(ev) } 

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

有没有什么想法可以尝试解决这个问题?触摸和应用程序响应之间的延迟非常令人讨厌。


你只是通过iOS模拟器进行测试吗?我很确定它会故意添加延迟。 - Jeffrey Sweeney
1个回答

0

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

在我的项目中,我发现如果查看者非常有意识地进行touchmove手势,并在移动结束前稍微暂停一下,那么touchmove事件实际上会被发送,就像人们所期望的那样。因此,文档中描述的行为可能与现实有些不符,这只增加了混乱和我的调试工作。

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

我希望这也能帮助你(和其他人)!


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