2011-08-25 30 views
44

Nếu tôi bắt tất cả các sự kiện touchend từ các thiết bị di động với:thuộc tính sự kiện touchend

$(document.body).bind('touchend', function (e) { 
var touch = e.touches[0]; // doesnt work 
... 

tôi cần phải nhận được touch.screenX, touch.screenY, touch.clientX và touch.clientX từ e paramter. Tất cả các ví dụ tôi đã thấy cho thấy rằng e.touches sẽ là một bộ sưu tập, và bạn có thể nhận được các chi tiết liên lạc với e.touches[0]. Trong các thử nghiệm của tôi trên một ipad, e.touches luôn không xác định. Tôi không sử dụng bất kỳ plugin jquery nào.

Cũng đã thử e.targetTouches, cũng không được xác định.

Có ai giúp được không?

Trả lời

96

Trên thực tế, công bố chạm sẽ được tìm thấy trong mảng changedTouches, ví dụ:

e.changedTouches[0].pageX // get the end x page coordinate for a released touch

Tôi nghĩ rằng đây là hơi đáng tin cậy hơn đi qua bất động sản originalEvent.

Bạn có thể đọc thêm về changedTouches đây: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

nên không này là câu trả lời được chấp nhận? Bình chọn nó lên! –

+0

Tôi đồng ý, đây là giải pháp đúng. Tôi, bản thân mình, đang sử dụng điều này vì nó có dữ liệu chính xác cần thiết và tại sao trộn nhiều API hơn mức cần thiết. –

+2

Đây không phải là trường hợp với android nếu bạn đang sử dụng jQuery. $ ('# test'). on ('touchend', hàm (evt) {console.log (evt.changedTouches);}); là rỗng, nếu bạn làm $ ('# test'). bind ('touchend' ... nhưng nếu bạn cắt jquery ra khỏi phương trình và làm getElementBy và addEventListener nó hoạt động .. – WORMSS

10

Thuộc tính chạm là đối tượng TouchList. Bạn có thể xem tham chiếu lớp TouchList here.

Nếu bạn theo dõi tài sản chiều dài của nó với ví dụ mã này vào #log div:

$('#element').bind('touchstart', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

$('#element').bind('touchmove', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

$('#element').bind('touchend', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

bạn sẽ nhận được 1 trong khi thực hiện touchstart và touchmove, một 0 khi thực hiện touchend. Đó là lý do tại sao bạn nhận được không xác định từ e.touches[0].

Các vấn đề liên quan