2

我正在测试来自 Mozilla https://developer.mozilla.org/en-US/docs/Web/Guide/Touch_events的画布中的多点触控示例

这是我面临的问题:触摸界面的标识符属性始终在笔记本电脑上的每个触摸点上显示整数值 0(我使用的是 Google Chrome 版本 26.0.1410.64 m),这是一款触摸超极本。

根据规范,每次触摸的标识符应该是唯一的,但对于画布上的每个新触摸点,它都显示为 0。

请帮助我了解导致它的原因,因为我想使用标识符唯一值将其映射到不同的颜色,并在触摸画布上绘制应用程序。

4

1 回答 1

0

在回应您的评论时,我认为您特别指的是这段代码:

 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事件的属性。

于 2013-05-12T20:47:06.443 回答