Piszę witrynę sieci Web, która ma być używana zarówno z komputerów stacjonarnych, jak i tabletów. Kiedy jest odwiedzany z pulpitu, chcę, aby klikalne obszary ekranu były podświetlane z :hover
efektami (inny kolor tła itp.). Na tablecie nie ma myszy, więc nie chcę żadnych efektów najechania kursorem.
Problem polega na tym, że kiedy dotykam czegoś na tablecie, przeglądarka ewidentnie ma jakiś „niewidoczny kursor myszy”, który przesuwa się do miejsca, w które stuknąłem, a następnie zostawia go tam - więc to, co właśnie stuknąłem, zapala się efekt najechania, dopóki nie stuknę czegoś innego.
Jak mogę uzyskać efekty najechania kursorem, gdy używam myszy, ale je wyłączyć, gdy używam ekranu dotykowego?
Na wypadek, gdyby ktoś myślał o zasugerowaniu tego, nie chcę korzystać z węszenia klienta użytkownika. To samo urządzenie może mieć zarówno ekran dotykowy, jak i mysz (może nie tak powszechne obecnie, ale znacznie bardziej w przyszłości). Nie interesuje mnie urządzenie, interesuje mnie jak jest aktualnie używane: mysz czy ekran dotykowy.
Próbowałem już podpinania się touchstart
, touchmove
oraz touchend
wydarzenia i powołanie preventDefault()
na wszystkie z nich, które nie tłumią „niewidzialny kursor myszy” na jakiś czas; ale jeśli szybko stuknę tam iz powrotem między dwoma różnymi elementami, po kilku stuknięciach zacznie przesuwać „kursor myszy” i tak czy inaczej podświetla efekty najechania - to tak, jakby mój preventDefault
nie zawsze był honorowany. Nie będę Cię zanudzać szczegółami, chyba że będzie to konieczne - nie jestem nawet pewien, czy jest to właściwe podejście; jeśli ktoś ma prostsze rozwiązanie, mam wszystkie uszy.
Edycja: Można to odtworzyć za pomocą standardowego CSS bog :hover
, ale oto krótka reprodukcja w celach informacyjnych.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Jeśli najedziesz kursorem myszy na jedno z pól, pojawi się niebieskie tło, które chcę. Ale jeśli dotkniesz któregokolwiek z pól, również pojawi się niebieskie tło, czemu staram się zapobiec.
Opublikowałem tutaj również próbkę , która wykonuje powyższe, a także przechwytuje zdarzenia myszy jQuery. Możesz go użyć, aby zobaczyć, że zdarzenia dotknięcia również będą uruchamiane mouseenter
, mousemove
i mouseleave
.