在 touchstart
事件中,您可以存储所有可能需要的值(例如 x、y、目标等)。在 touchend
事件中,您可以通过 Touch.identifier
值检索所有已存储的值,该值应对于每个触摸操作是唯一的。
我已经在这里创建了一个概念验证:http://jsbin.com/adifit/3/
以下代码仅跟踪 x
和 y
位置,但如果需要,您可以跟踪任何属性。
代码的基本思路如下:
- 在
touchstart
事件中创建一个对象并将所有数据存储在其中(包括触摸 ID)
- 将此对象存储在数组中
- 在
touchend
事件中,检查触摸操作的 ID,并尝试在数组中找到相应的对象
- 如果找到,则完成。
代码如下:
var touches = [];
var cons;
$(init);
function init()
{
cons = $("#console");
document.getElementById("area").addEventListener("touchstart", onTouchStart);
document.addEventListener("touchend", onTouchEnd);
document.addEventListener("touchcancel", onTouchEnd);
}
function onTouchStart(e)
{
e.preventDefault();
var touchList = e.changedTouches;
var touch;
for(var i = 0; i < touchList.length; i++)
{
cons.html(cons.html() + "startX: " + touchList[i].screenX + ", id: " + touchList[i].identifier + "<br/>");
touch = {x: touchList[i].screenX, y: touchList[i].screenY, id: touchList[i].identifier};
touches.push(touch);
}
}
function onTouchEnd(e)
{
cons.html(cons.html() + "<strong>TouchEnd:</strong><br/>");
var touchList = e.changedTouches;
var touch;
for(var i = 0; i < touchList.length; i++)
{
touch = {x: touchList[i].screenX, y: touchList[i].screenY, id: touchList[i].identifier};
for (var j = touches.length - 1; j >= 0 ; j--)
{
if (touches[j].id == touch.id)
{
cons.html(cons.html() + "<strong>startX: "+ touches[j].x+ ", id: " + touchList[i].identifier + "</strong><br/>");
touches.splice(j, 1);
}
}
}
}
上面的代码使用了jQuery,但它仅用于方便在屏幕上显示结果,jQuery未用于其他任何事情。
上面的代码使用了jQuery,但仅用于方便在屏幕上显示结果,未用于其他任何用途。