Możesz zapisać wszystkie potrzebne wartości (np. X, Y, Target itd.). Na touchend
możesz odzyskać wszystkie zapisane wartości dzięki wartości Touch.identifier
, która powinna być unikalna dla każdego dotyku.
Stworzyłem dowodu koncepcji tutaj: http://jsbin.com/adifit/3/
Poniższy kod śledzi x
i y
pozycji tylko, ale można śledzić którąkolwiek z właściwości, jeśli trzeba.
Ideą kod jest:
- na
touchstart
utworzyć obiekt i zapisać wszystkie wewnętrzne dane (w tym dotykowy ID)
- sklep ten obiekt w tablicy
- na
touchend
sprawdzaj id dotyku i spróbuj znaleźć odpowiedni obiekt w tablicy, jeśli zostanie znaleziony, niż skończymy.
I kod:
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);
}
}
}
}
Powyższy kod używa jQuery, ale jest używany tylko dla wygody wyświetlania wyników na ekranie, jQuery nie służy do niczego innego.
Dlaczego nie przechowujesz x, y, gdy zaczyna się dotyk, i odzyskasz go po wydaniu ... –
Zaktualizowałem moją odpowiedź, mam nadzieję, że właśnie tego szukałeś. – strah