Trên touchstart
bạn có thể lưu trữ tất cả các giá trị bạn có thể cần (như x, y, mục tiêu, v.v.). Trên touchend
bạn có thể truy xuất tất cả các giá trị được lưu trữ nhờ giá trị Touch.identifier
phải là giá trị duy nhất cho mỗi lần chạm.
Tôi đã tạo ra một bằng chứng của khái niệm ở đây: http://jsbin.com/adifit/3/
Đoạn code dưới đây theo dõi x
và y
vị trí duy nhất, nhưng bạn có thể theo dõi bất kỳ thuộc tính nếu bạn cần.
Ý tưởng đằng sau mã là:
- trên
touchstart
tạo một đối tượng và lưu trữ tất cả các dữ liệu bên trong (bao gồm ID touch)
- cửa hàng đối tượng này trong mảng
- trên
touchend
kiểm tra các id của liên lạc và cố gắng tìm đối tượng tương ứng trong mảng
- nếu tìm thấy chúng tôi đã hoàn tất.
Và mã:
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);
}
}
}
}
Đoạn mã trên sử dụng jQuery, nhưng nó chỉ được sử dụng để tiện hiển thị kết quả trên màn hình, jQuery không được sử dụng cho bất cứ điều gì khác.
Tại sao bạn không lưu trữ x, y khi liên lạc bắt đầu và thử lại cái đó khi phát hành ... –
Tôi đã cập nhật câu trả lời của mình, hy vọng đó là những gì bạn đang tìm kiếm. – strah