iOS touchstart和touchmove之间的延迟?

时间:2012-03-19 22:47:55

标签: javascript jquery iphone ios touch

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

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

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

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

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

我想找到什么想法试图解决这个问题?触摸和从应用程序获得响应之间的滞后是非常烦人的。

1 个答案:

答案 0 :(得分:0)

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

在我的项目中,我发现如果观看者非常故意地进行触摸手势并且在移动结束时抬起手指之前暂停一点,那么touchmove事件实际上是作为人们可能会期待。因此,记录在案的行为可能与现实有点不同,这只会增加混乱和我的调试工作。

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

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