我在iPhone上玩touchstart和touchend事件.我构建了一个具有div的示例页面,如果您触摸它并滚动页面,它应该返回开始和结束位置的y坐标.
jQuery:
var touchStartPos;
$('.theDiv')
.bind('touchstart', function(e){
touchStartPos = e.pageY;
})
.bind('touchend', function(e){
alert(touchStartPos + ' | ' + e.pageY)
})
Run Code Online (Sandbox Code Playgroud)
但是,当我在iPhone上加载该页面时,警报会将两个值都报告为零.有人看到我有什么问题吗?
更新:
我偶然发现了jQuery Mobile项目中的这段代码:https://github.com/jquery/jquery-mobile/issues/734
它的评论突出:
// (in iOS event.pageX and event.pageY are always 0 )
Run Code Online (Sandbox Code Playgroud)
它没有说明为什么会这样,但至少我发现其他人看到了同样的事情.将挖掘该页面上的示例代码以查看解决方案是否存在.
更新II:
好吧,在查看上面链接中的示例代码后,看起来这将返回一个实际值:
e.originalEvent.touches[0].pageY
Run Code Online (Sandbox Code Playgroud)
问题是,我现在意识到这不是我需要的.它将我附加事件的对象触摸区域的Y偏移返回到与HTML文档相关的...而不是浏览器窗口.
我的目标是弄清楚触摸开始的位置和结束位置......然后比较值.如果它们有点不同,那么我们就会进行滑动...而不是触摸.
更新III:
我也找到了这些例子的参考:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
Run Code Online (Sandbox Code Playgroud)
虽然我似乎无法让那些工作.两者都返回未定义的错误.
更新IV:
看起来一种解决方案是跟踪文档本身的offset().我可以将touchend事件应用于文档,然后检查它的偏移量.
这个问题是我的touchend事件将首先触发我页面上的元素,然后它会在文档上触发它(冒泡).因此,在我需要弄清楚如何对象touchend事件之前,我无法确定它是触摸还是滑动.
还在思考这一个......