【发布时间】:2011-10-29 07:59:48
【问题描述】:
我正在 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 )
它并没有说为什么是这样的,但至少我找到了其他人看到同样的事情。将挖掘该页面上的示例代码以查看解决方案是否存在。
更新二:
嗯,看了上面链接中的示例代码后,看起来这将返回一个实际值:
e.originalEvent.touches[0].pageY
关键是,我现在意识到这不是我需要的。它返回我在将事件附加到与 HTML 文档相关的对象中触摸的区域的 Y 偏移量......而不是浏览器窗口。
我的目标是找出触摸在屏幕上从哪里开始,在哪里结束……然后比较这些值。如果它们有很大不同,那么我们假设执行了滑动......而不是触摸。
更新三:
我还找到了对这些示例的引用:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
虽然我似乎也无法让这些工作。两者都返回未定义的错误。
更新四:
看起来一种解决方案是在文档本身上跟踪 offset()。我可以对文档应用一个 touchend 事件,然后检查它的偏移量。
这个问题是我的 touchend 事件将首先在我的页面上的元素上触发,然后它会在文档上触发它(冒泡)。所以在我需要弄清楚在对象 touchend 事件上要做什么之前,我实际上无法确定它是触摸还是滑动。
还在琢磨这个……
【问题讨论】:
-
很奇怪,不知道手机,但点击效果很好jsfiddle.net/nH2PU
-
我希望这不会是一个大问题。 ;)
-
Android (2.2.2) 中似乎也发生了同样的事情
标签: jquery touch-event swipe-gesture pagey