Tôi đang viết một trang Web dùng cho cả máy tính để bàn và máy tính bảng. Khi nó được truy cập từ máy tính để bàn, tôi muốn các vùng có thể nhấp của màn hình sáng lên với các :hover
hiệu ứng (màu nền khác nhau, v.v.) Với máy tính bảng, không có chuột, vì vậy tôi không muốn bất kỳ hiệu ứng di chuột nào.
Vấn đề là, khi tôi chạm vào một thứ gì đó trên máy tính bảng, trình duyệt rõ ràng có một số loại "con trỏ chuột vô hình" mà nó di chuyển đến vị trí tôi đã nhấn, và sau đó để nó ở đó - vì vậy thứ tôi vừa chạm sáng lên với hiệu ứng di chuột cho đến khi tôi chạm vào thứ khác.
Làm cách nào để có được các hiệu ứng di chuột khi tôi đang sử dụng chuột nhưng lại tắt chúng khi tôi đang sử dụng màn hình cảm ứng?
Trong trường hợp ai đó đang nghĩ đến việc đề xuất nó, tôi không muốn sử dụng tính năng đánh hơi tác nhân người dùng. Cùng một thiết bị có thể có cả màn hình cảm ứng và chuột (có thể không quá phổ biến hiện nay, nhưng nhiều hơn thế nữa trong tương lai). Tôi không quan tâm đến thiết bị, tôi quan tâm đến cách nó hiện đang được sử dụng: chuột hay màn hình cảm ứng.
Tôi đã thử nối các touchstart
, touchmove
và touchend
các sự kiện và gọi preventDefault()
tất cả chúng, điều này đôi khi ngăn chặn "con trỏ chuột vô hình"; nhưng nếu tôi chạm nhanh qua lại giữa hai yếu tố khác nhau, sau một vài lần nhấn, nó sẽ bắt đầu di chuyển "con trỏ chuột" và dù sao cũng làm sáng các hiệu ứng di chuột - điều đó giống như tôi preventDefault
không phải lúc nào cũng được. Tôi sẽ không cung cấp cho bạn các chi tiết trừ khi cần thiết - tôi thậm chí không chắc đó là cách tiếp cận phù hợp để thực hiện; nếu ai có cách sửa chữa đơn giản hơn, tôi tất cả các tai.
Chỉnh sửa: Điều này có thể được sao chép bằng CSS chuẩn không có thật :hover
, nhưng đây là bản diễn lại nhanh để tham khảo.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Nếu bạn di chuột qua một trong hai hộp, nó sẽ nhận được nền màu xanh, tôi muốn. Nhưng nếu bạn chạm vào một trong hai hộp, nó cũng sẽ nhận được nền màu xanh lam, đó là điều tôi đang cố gắng ngăn chặn.
Tôi cũng đã đăng một mẫu ở đây thực hiện điều trên và cũng kết nối các sự kiện chuột của jQuery. Bạn có thể sử dụng nó để thấy rằng sự kiện tap cũng sẽ cháy mouseenter
, mousemove
và mouseleave
.