Hammer.js: Thư Viện Nhận Cử Chỉ Chạm JavaScript
Hammer.js là một thư viện JavaScript nhỏ, chuyển thao tác chạm và con trỏ trên một phần tử DOM thành các cử chỉ có tên như tap, press và swipe. Nó làm tốt đúng một việc. Bạn có cử chỉ chạm phổ biến mà không phải tự viết state machine. Các sự kiện khởi động nhanh có sẵn press, tap và doubletap; còn lại, như triple-tap, bạn phải tự dựng một Hammer.Manager và recognizer, dùng cùng mẫu .on() quen thuộc.
Hammer.js Là Gì?
Hammer.js là một thư viện JavaScript nhận diện cử chỉ đa chạm trên các phần tử DOM, chuyển thao tác chạm và con trỏ thô thành các sự kiện như tap, press, doubletap và swipe. Bạn gắn nó vào một phần tử bằng new Hammer(element) rồi đăng ký cử chỉ cần theo dõi bằng .on(), giống cách dùng một event listener DOM thông thường. Hammer.js có trên npm dưới tên gói hammerjs, cũng có qua cdnjs, theo giấy phép MIT cho phép dùng thương mại.
Các Cử Chỉ Và Recognizer Được Hỗ Trợ
- ✓Các sự kiện khởi động nhanh press, tap và doubletap hoạt động ngay khi bạn tạo một instance new Hammer(element), không cần cấu hình thêm.
- ✓Cử chỉ swipe được minh họa trong chính các ví dụ CodePen của dự án, bên cạnh tap, double tap và press.
- ✓Một Hammer.Manager cho phép đăng ký recognizer tùy chỉnh, như ví dụ tripletap trong README được dựng từ Hammer.Tap với tùy chọn taps: 3.
- ✓Recognizer được thêm vào manager bằng .add() và đăng ký lắng nghe bằng .on(), giữ đúng mẫu event-listener như các cử chỉ khởi động nhanh.
- ✓Được phân phối dưới dạng gói hammerjs trên npm, cài đặt được bằng npm hoặc Yarn, hoặc tải trực tiếp từ CDN qua cdnjs.
- ✓Giấy phép MIT, nên logic nhận diện cử chỉ có thể nhúng vào sản phẩm closed-source hay thương mại.
Bắt Đầu Với Hammer.js
Đường đi khởi động nhanh, lấy thẳng từ README: lấy tham chiếu tới một phần tử, bọc nó bằng `var hammer = new Hammer(square);`, rồi đăng ký bằng `hammer.on('press', function(e) { ... });` — press, tap và doubletap đều hoạt động theo cách này mà không cần thiết lập gì thêm. Với một cử chỉ không nằm trong danh sách khởi động nhanh đó, như triple-tap, README hướng dẫn tự dựng: tạo `var manager = new Hammer.Manager(square);`, định nghĩa recognizer bằng `new Hammer.Tap({ event: 'tripletap', taps: 3 })`, thêm nó bằng `manager.add(TripleTap)`, rồi đăng ký bằng `manager.on('tripletap', function(e) { ... });`.
Các Trường Hợp Sử Dụng Phổ Biến
- •Thêm tương tác swipe-to-dismiss hoặc swipe-to-navigate cho một gallery hay carousel trên web di động.
- •Gắn hành động press-and-hold vào một giao diện cảm ứng bằng sự kiện press có sẵn, thay vì tự viết timer touchstart/touchend.
- •Nhận diện double-tap hoặc một cử chỉ multi-tap tùy chỉnh, như ví dụ tripletap trong README, trên trình xem ảnh hoặc widget bản đồ.
- •Thêm hỗ trợ cử chỉ chạm cho một component vanilla JS hoặc không phụ thuộc framework, mà không cần kéo theo cả một hệ thống gesture của UI framework.
Điểm Mạnh
- ✓API khởi động nhanh thực sự nhanh: new Hammer(element) cộng .on('press', fn) là toàn bộ thiết lập cho các cử chỉ phổ biến nhất.
- ✓Giấy phép MIT, không vướng rào cản pháp lý khi dùng cho sản phẩm thương mại hay closed-source.
- ✓Thư viện nhỏ, chỉ làm một việc — nhận diện cử chỉ, không cố gắng kiêm luôn UI framework hay thư viện animation.
- ✓Recognizer tùy chỉnh, như ví dụ tripletap, dùng lại đúng mẫu sự kiện .on() như các cử chỉ có sẵn, nên không phải học thêm một API riêng.
Hạn Chế Của Hammer.js
- △Bất cứ thứ gì ngoài ba sự kiện khởi động nhanh (press, tap, doubletap) đều đòi hỏi tự dựng Hammer.Manager và recognizer — README không liệt kê một danh sách cử chỉ dựng sẵn lớn hơn.
- △README không ghi hoạt động phát hành hay phiên bản hiện tại, nên chỉ dựa vào đây bạn không thể biết dự án còn được phát triển tích cực hay không.
- △README không nêu type TypeScript, binding cho framework, hay hướng dẫn thiết lập theo từng bundler — việc tích hợp vào React, Vue hay tương tự là do bạn tự làm.
- △Mục Examples chỉ dẫn tới demo CodePen cho tap, double tap, press và swipe — không có ví dụ tương tác nào trong repo cho trường hợp phức tạp hơn như cử chỉ tripletap tùy chỉnh.
Lựa Chọn Thay Thế Cho Hammer.js
Câu Hỏi Thường Gặp
Hammer.js được phát hành theo giấy phép MIT, cho phép dùng cho mục đích thương mại, chỉnh sửa và phân phối lại mà không phải trả phí hay mở mã nguồn dự án của bạn. Điều này khiến Hammer.js là lựa chọn an toàn cho cả dự án cá nhân lẫn thương mại.
Hammer.js lắng nghe thao tác con trỏ và chạm trên bất kỳ phần tử DOM nào bạn gắn vào bằng new Hammer(element), nên cách xử lý sự kiện kiểu .on('press', ...) áp dụng như nhau bất kể loại thiết bị. README không nêu rõ ma trận hỗ trợ trình duyệt desktop cụ thể ngoài điều đó.
Tap và press đều là sự kiện khởi động nhanh trong Hammer.js, nhưng ứng với hai cử chỉ khác nhau: tap kích hoạt khi chạm nhanh, còn press ứng với việc giữ chạm, như trong ví dụ press của chính README bật/tắt một CSS class trên e.target. README không nêu ngưỡng thời gian chính xác của từng loại.
README của Hammer.js đưa ra chính xác ví dụ này: tạo một Hammer.Manager cho phần tử của bạn, khởi tạo new Hammer.Tap({ event: 'tripletap', taps: 3 }), thêm vào manager bằng .add(), rồi đăng ký bằng manager.on('tripletap', callback).
README của repository Hammer.js trên GitHub không liệt kê hoạt động phát hành hay changelog hiện tại, nên tình trạng duy trì không được nêu rõ ở đây. Hãy kiểm tra trực tiếp lịch sử commit và issue tracker của repository để biết hoạt động cập nhật gần nhất trước khi phụ thuộc vào nó cho dự án mới.
Mặc định, các sự kiện khởi động nhanh của Hammer.js gồm press, tap và doubletap, còn trang ví dụ của dự án cũng minh họa thêm swipe. Ngoài ra, Hammer.js hỗ trợ cử chỉ tùy chỉnh, như ví dụ tripletap trong chính README, được dựng bằng Hammer.Manager và một recognizer như Hammer.Tap.
Vấn Đề Mà Hammer.js Giải Quyết
Nhận diện một cú swipe hay long-press trên trình duyệt thường đòi hỏi tự lắng nghe các sự kiện touchstart/touchmove/touchend hoặc pointer thô, tự theo dõi vị trí bắt đầu, khoảng cách và thời gian, rồi lặp lại việc đó cho từng phần tử. README của Hammer.js mô tả đúng khoảng trống này: gắn thư viện vào một phần tử, nó phát ra các sự kiện có tên như press, tap và doubletap thay vì bạn phải tự viết logic theo dõi đó từ đầu.
Cách Cài Đặt / Dùng Thử
Cài từ npm bằng `npm install --save hammerjs`, hoặc bằng Yarn với `yarn add hammerjs`. Nếu không muốn qua bước build, cdnjs cung cấp hammer.js để dùng trực tiếp bằng thẻ `<script>`. Ngoài ra, README không nêu rõ phiên bản trình duyệt hay bundler tối thiểu.
Nên Thử Hammer.js — Và Ai Nên Bỏ Qua
Người phù hợp với Hammer.js là developer đang gắn hỗ trợ cảm ứng vào một carousel, trình xem ảnh, hay component UI tùy chỉnh bằng vanilla JS — các sự kiện khởi động nhanh có sẵn press, tap và doubletap mà không cần thiết lập gì thêm, còn ví dụ tripletap trong chính README cho thấy cách gắn thêm cử chỉ khác. Nếu dự án cần pinch, rotate, hay drag-and-resize như cử chỉ dựng sẵn, hoặc muốn có type TypeScript và binding framework đi kèm, không điều nào trong số đó được README nêu ra, nên hãy tính thời gian tự xây hoặc tìm lựa chọn khác.
Muốn nghe thêm một ý kiến về hammer.js?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về hammer.js.
