Tôi đang cố gắng làm cho một số thư viện của mình hoạt động với các thiết bị cảm ứng, nhưng tôi đang gặp khó khăn khi cố gắng tìm hiểu cách chúng được hỗ trợ và cách chúng hoạt động.
Về cơ bản, có 5 sự kiện chạm , nhưng có vẻ như chỉ có sự đồng thuận giữa các trình duyệt di động về touchstart
sự kiện này (duh). Tôi đã tạo một fiddle như một trường hợp thử nghiệm.
Tôi đã thử nghiệm điều này trên Galaxy Note của mình với Android 4 trên bo mạch, nhưng bạn cũng có thể kiểm tra liên kết bằng trình duyệt trên máy tính để bàn.
Mục đích là cố gắng tìm ra cách xử lý các vòi, vòi kép và vòi dài. Không có gì lạ mắt.
Về cơ bản, đây là những gì sẽ xảy ra:
Các trình duyệt cổ Android làm sự kiện liên lạc không cháy. Nó chỉ cố gắng bắt chước cú click chuột với vòi nước, bắn mousedown
, mouseup
và click
các sự kiện liên tiếp, nhưng vòi đôi chỉ phóng to trong và ngoài trang tha.
Chrome dành cho Android kích hoạt sự kiện bắt đầu cảm ứng khi ngón tay chạm vào màn hình. Nếu nó được phát hành đủ sớm, nó cháy rồi mousedown
, mouseup
, touchend
và cuối cùng là click
sự kiện.
Trong trường hợp vòi dài , sau khoảng một nửa thứ hai nó cháy mousedown
và mouseup
, và touchend
khi ngón tay được nâng lên, không có click
sự kiện ở cuối.
Nếu bạn di chuyển ngón tay , nó sẽ kích hoạt một touchmove
sự kiện vài lần, sau đó nó kích hoạt một touchcancel
sự kiện và không có gì xảy ra sau đó, thậm chí không xảy ra touchend
sự kiện khi nhấc ngón tay lên.
Một chạm đúp trigger zoom in / out tính năng, nhưng sự kiện-khôn ngoan nó bắn combo touchstart
- touchevent
hai lần, không có sự kiện chuột sa thải.
Firefox dành cho Android bắn một cách chính xác các touchstart
sự kiện, và trong trường hợp cháy vòi ngắn mousedown
, mouseup
, touchend
và click
sau đó.
Trong trường hợp vòi dài , nó cháy mousedown
, mouseup
và cuối cùng là touchend
sự kiện. Chrome cũng vậy cho những thứ này.
Nhưng nếu bạn di chuyển ngón tay của bạn , nếu cháy touchmove
liên tục (như người ta có thể mong đợi) nhưng nó doesn không bắn các touchleave
sự kiện khi lá ngón tay các phần tử với người nghe sự kiện, và không cháy, các touchcancel
sự kiện khi ngón tay được ra khỏi khung nhìn trình duyệt .
Đối với các lần nhấn đúp , nó hoạt động giống như Chrome.
Opera Mobile làm điều tương tự của Chrome và Firefox chỉ với một lần nhấn ngắn, nhưng trong trường hợp nhấn lâu, sẽ kích hoạt một số loại tính năng chia sẻ mà tôi thực sự muốn tắt. Nếu bạn di chuyển ngón tay hoặc nhấn đúp, nó sẽ hoạt động giống như Firefox.
Chrome beta hiện thông thường cho vòi ngắn, nhưng trong trường hợp của vòi dài nó không cháy các mouseup
sự kiện nữa, chỉ touchstart
, sau đó mousedown
sau một hiệp hai, sau đó touchend
khi các ngón tay được nâng lên. Khi ngón tay được di chuyển, bây giờ nó hoạt động giống như Firefox và Opera Mobile.
Trong trường hợp nhấn đúp , nó không kích hoạt các sự kiện chạm khi thu nhỏ mà chỉ kích hoạt khi phóng to.
Phiên bản beta của Chrome cho thấy hành vi kỳ lạ nhất, nhưng tôi thực sự không thể phàn nàn vì nó là bản beta.
Câu hỏi đặt ra là : có cách nào đơn giản và dễ dàng để cố gắng phát hiện các lần nhấn ngắn, vòi dài và nhấn đúp trong các trình duyệt phổ biến nhất của thiết bị cảm ứng không?
Thật tệ, tôi không thể kiểm tra nó trên các thiết bị iOS có Safari hoặc IE cho Windows Phone 7 / Phone 8 / RT, nhưng nếu một số bạn có thể, phản hồi của bạn sẽ rất được đánh giá cao.