Javascript ontouchstart/move/end-获取wierd结果

Javascript ontouchstart/move/end-获取wierd结果,javascript,touch,coordinates,swipe,Javascript,Touch,Coordinates,Swipe,我正在为平板电脑/智能手机构建具有滑动功能的图像库。我在iPad上得到了非常奇怪的结果,所以我决定从一开始就跟踪它,并在不同的事件发生时打印出来 下面的代码应该在我用手指完成刷卡后发出类似“start.move.move.move.end”的警告(“移动”的数量取决于刷卡操作的时间长短) 然而,我收到了非常奇怪的警报,它们在Android/iOS设备上有很大的不同。在安卓系统上,大多数情况下,结果都是出人意料的: “开始。移动。移动。移动。移动。结束” “start.end”(仅在轻弹屏幕时)

我正在为平板电脑/智能手机构建具有滑动功能的图像库。我在iPad上得到了非常奇怪的结果,所以我决定从一开始就跟踪它,并在不同的事件发生时打印出来

下面的代码应该在我用手指完成刷卡后发出类似“start.move.move.move.end”的警告(“移动”的数量取决于刷卡操作的时间长短)

然而,我收到了非常奇怪的警报,它们在Android/iOS设备上有很大的不同。在安卓系统上,大多数情况下,结果都是出人意料的:

“开始。移动。移动。移动。移动。结束”

“start.end”(仅在轻弹屏幕时)

“开始。移动。开始。结束”(每隔一次触摸动作就会发生这种情况)

但在iPad上,我得到了一些非常奇怪的结果。在第一次触摸操作中,我得到的正是我所期望的,但在第二次触摸时,包含结果的警报(“start.move.move.move.end”)会在触摸屏幕时立即触发,并且始终包含以前的结果。当我第三次触摸屏幕时,它会再次恢复正常操作,因此每进行一次触摸操作都会恢复正常操作


我四处寻找过有类似问题的人,但我似乎最接近的是有多点触摸操作问题的用户(我对此不感兴趣)。关于为什么会发生这种情况,您有什么建议吗?

您必须记住,触摸是一种多点触摸,而不像鼠标事件总是一个。每次获得触摸事件(touchstart、touchstart、touchend)时,您也会获得一个标识符

itemWrap[0].ontouchstart = function(e) {
    // e.touches.length - number of touches
    // e.touches[e.touches.length - 1].identifier - last touch is the last one on the list
    // e.touches[e.touches.length - 1].pageX and .pageY - place of the touch
    _self.msg.push("start");
}
因此,当您执行touchmove和touchend时,您必须检查该标识符,以查看哪个触摸被移动或结束。您可以通过在touchstart中保存该数据来完成此操作:

var t = {pageX:event.touches[index].pageX, pageY:event.touches[index].pageY, identifier:event.touches[index].identifier};
touches.push(t);
然后使用在touchend中找到正确的触摸

event.changedTouches[0].identifier
在这里,您不需要浏览该列表,因为它总是一个,但您必须将该标识符与保存在列表中的标识符进行比较


希望这会有所帮助。

我不确定这里的情况是否相同,但我注意到,javascript中的触摸事件有时顺序不正确。最终事件在移动事件之前就开始了,也许这就是为什么会有这样的结果,但这不仅是iPad的情况,也是android的情况。这个答案没有得到应有的赞赏,因为它是如此彻底。
event.changedTouches[0].identifier