我在iPhone上使用touchstart和touchend事件进行开发。我创建了一个示例页面,其中包含一个div元素,如果您触摸它并滚动页面,则应返回起始和结束位置的y坐标。
jQuery代码:
var touchStartPos;
$('.theDiv')
.bind('touchstart', function(e){
touchStartPos = e.pageY;
})
.bind('touchend', function(e){
alert(touchStartPos + ' | ' + e.pageY)
})
然而,当我在iPhone上加载该页面时,警报仍会将两个值都报告为零。有人看出我写错了什么吗?
更新:
我偶然发现了jQuery Mobile项目中的这段代码:https://github.com/jquery/jquery-mobile/issues/734
其中一个评论引起了我的注意:
// (in iOS event.pageX and event.pageY are always 0 )
它没有说明为什么会这样,但至少我找到了另一个看到同样情况的人。将在那个页面上查看示例代码以查看是否有解决方案。
更新 II:
好的,在查看上述链接中的示例代码后,看起来这将返回实际值:
e.originalEvent.touches[0].pageY
问题是,我现在意识到这不是我需要的。它返回我在对象上附加事件时触摸区域相对于HTML文档的Y偏移量…而不是浏览器窗口。
我的目标是找出触摸开始和结束的屏幕位置,然后比较这些值。如果它们相差很大,那么我们就认为进行了滑动...而不是触摸。
更新三:
我还发现了这些示例的参考:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
尽管我似乎也无法使它们起作用。两者都返回未定义错误。
更新IV:
看起来一个解决方案是追踪文档本身的偏移量(offset())。我可以对文档应用touchend事件,然后检查它的偏移量(offset)。
问题在于我的touchend事件将首先触发页面上的元素,然后再触发文档上的元素(冒泡)。因此,在需要确定对象的touchend事件执行之前,我实际上无法确定它是触摸还是滑动。
仍在考虑这个问题...