在回应您的评论时,我认为您特别指的是这段代码:
function ongoingTouchIndexById(idToFind) {
for (var i=0; i<ongoingTouches.length; i++) {
var id = ongoingTouches[i].identifier;
if (id == idToFind) {
return i;
}
}
return -1; // not found
}
正如你所看到的,这个函数要么返回给定 id 的索引(如果一个特定的Touch
还没有结束,因为处理程序被最后一次调用),或者返回 -1。
您链接到的代码页非常简单,IMO:每次注册新的 touchstart 事件时,都会检查正在进行的(或过去的)触摸事件的 id,并从全局(邪恶)数组中删除相应的 id。这样做的原因有很多,但我会把这些留给你去寻找(或者在你尝试熟悉代码后提出一个后续问题)。
对于每个不同的更改触摸,标识符都是唯一的。现在,您没有提供您正在使用的代码,但我的猜测是您没有从正确的位置获取唯一标识符:
var ids = [];
for (var i=0;i<e.changedTouches.length;i++)
{
ids.push(e.changedTouches[0].identifier);
}
console.log(ids);
如果您触摸超过 1 个数字,ids
则应为每次触摸包含一个不同的 id。
我可能在这里完全看错了树,但再次:将您的代码添加到问题中,以便我们确定。但是您可能会一遍又一遍地重新分配 id,只留下数组中最后一个Touch
的值。
您也可以尝试直接从对象中获取标识符。或者你可能正在做其他事情,都是一样的。changedTouches
event
检查您的控制台,记录事件对象并检查该changedTouches
事件的属性。