我在我的 iPhone 上玩 touchstart 和 touchend 事件。我构建了一个带有 div 的示例页面,如果您触摸它并滚动页面,它应该返回开始和结束位置的 y 坐标。
链接:http: //jsbin.com/ibemom/2
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 )
它没有说明为什么会这样,但至少我找到了其他人看到同样的事情。将挖掘该页面上的示例代码以查看解决方案是否存在。
更新二:
好吧,在查看了上面链接中的示例代码之后,看起来这将返回一个实际值:
e.originalEvent.touches[0].pageY
问题是,我现在意识到这不是我需要的。它返回我在将事件附加到与 HTML 文档相关的对象中触摸的区域的 Y 偏移量......而不是浏览器窗口。
我的目标是找出触摸在屏幕上从哪里开始,在哪里结束……然后比较这些值。如果它们有很大不同,那么我们假设执行了滑动......而不是触摸。
更新三:
我还找到了对这些示例的引用:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
虽然我似乎也无法让那些工作。两者都返回未定义的错误。
更新四:
看起来一种解决方案是在文档本身上跟踪 offset()。我可以将 touchend 事件应用于文档,然后检查它的偏移量。
这样做的问题是我的 touchend 事件将首先在我的页面上的元素上触发,然后它会在文档上触发它(冒泡)。所以在我需要弄清楚在对象 touchend 事件上要做什么之前,我实际上无法确定它是触摸还是滑动。
还在琢磨这个。。。