2010-05-26 47 views
45

Để thực hiện theo các phương pháp hay nhất, chúng tôi đang cố gắng sử dụng các sự kiện JavaScript/jQuery phù hợp theo thiết bị bạn đang sử dụng. Ví dụ: chúng tôi đang tạo trang web trên điện thoại di động có thẻ sẽ có sự kiện onclick hoặc touch. Trong trường hợp của một chiếc iPhone, chúng tôi muốn sử dụng sự kiện "touchstart". Chúng tôi muốn kiểm tra xem thiết bị của họ có hỗ trợ "touchstart" trước khi chúng tôi liên kết trình xử lý đó với đối tượng hay không. Nếu không, thì chúng tôi sẽ ràng buộc "onclick" thay thế.Làm cách nào để kiểm tra trình duyệt hỗ trợ cảm ứng bằng JS/jQuery?

Cách tốt nhất để làm điều này là gì?

Trả lời

81

Bạn có thể phát hiện nếu sự kiện này được hỗ trợ bởi:

if ('ontouchstart' in document.documentElement) { 
    //... 
} 

tặng một cái nhìn cho bài viết này:

Các isEventSupported chức năng công bố ở đó, là thực sự tốt phát hiện nhiều sự kiện khác nhau và đó là trình duyệt chéo.

+1

tôi loại cám dỗ để +1 mục này, nhưng tôi biết rằng Firefox sẽ trở lại 'FALSE' đây để những lý do sai lầm. Firefox trả về false cho tất cả các sự kiện được kiểm tra theo cách này (tôi biết, đó là một trong những tình huống hiếm hoi mà Fx hút). Tuy nhiên, bài viết không đi vào đó, vì vậy bạn sẽ nhận được +1 ;-) –

+0

tài nguyên tuyệt vời của mình. Cảm ơn vì sự giúp đỡ nhanh chóng! – Alex

+15

Điều này chỉ phát hiện nếu trình duyệt ** hỗ trợ sự kiện chạm, nó không xác định xem thiết bị ** có hỗ trợ chúng hay không. Hãy thử tính năng này trong Chrome trên thiết bị không chạm. – RobG

3

Bạn có thể kiểm tra xem typeof document.body.ontouchstart == "undefined" để rơi trở lại với các sự kiện dom bình thường

1

tôi đã thực hiện một demostration đầy đủ mà làm việc ở mọi trình duyệt với mã nguồn đầy đủ các giải pháp của vấn đề này: Detect touch screen devices in Javascript.

+0

Tôi nghĩ rằng một ví dụ khá tốt. cám ơn vì đã chia sẻ. – zipzit

+0

Ví dụ của bạn tạo ra rất nhiều kết quả dương tính giả. Có nhiều trình duyệt thực hiện API cảm ứng theo mặc định cho dù thiết bị cảm ứng có thực sự được gắn vào hệ thống hay không. – Nilpo

+0

@Nilpo Có thể bạn đã đúng. Bài viết này đã được viết cách đây hơn bảy năm. –

11

Sử dụng mã này để phát hiện xem thiết bị có hỗ trợ chạm hay không.

Đồng thời làm việc cho windows 8 IE10 trong đó sử dụng sự kiện 'MSPointerDown' thay vì 'touchmove'

var supportsTouch = false; 
if ('ontouchstart' in window) { 
    //iOS & android 
    supportsTouch = true; 

} else if(window.navigator.msPointerEnabled) { 

    // Windows 
    // To test for touch capable hardware 
    if(navigator.msMaxTouchPoints) { 
     supportsTouch = true; 
    } 

} 
+3

Tại sao không đơn giản hóa nó như một lớp lót? '' var supportTouch = ('ontouchstart' trong cửa sổ || window.navigator.msPointerEnabled) '' –

+0

Thật không may, điều này không hoạt động cho ví dụ 11 trên Windows 10 trên máy tính xách tay HP (không có màn hình cảm ứng) cho tôi. Nó nói sai supportTouch = true. nhưng khi tôi ràng buộc một cái gì đó để "chạm vào", nó không bao giờ được thực hiện. Bất kỳ cách nào xung quanh điều này? –

+0

Điều này chỉ là sai.API con trỏ chỉ áp dụng cho nhiều thiết bị cảm ứng. Nó áp dụng cho mọi thiết bị đầu vào. – Nilpo

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