Sto scrivendo un sito Web che deve essere utilizzato sia da desktop che da tablet. Quando viene visitato da un desktop, voglio che le aree cliccabili dello schermo si illuminino con :hover
effetti (diverso colore di sfondo, ecc.) Con un tablet, non c'è mouse, quindi non voglio effetti al passaggio del mouse.
Il problema è che quando tocco qualcosa sul tablet, il browser ha evidentemente una sorta di "cursore del mouse invisibile" che si sposta nella posizione che ho toccato e poi lo lascia lì, quindi la cosa che ho appena toccato si accende con un effetto hover finché non tocco qualcos'altro.
Come posso ottenere gli effetti al passaggio del mouse quando utilizzo il mouse, ma sopprimerli quando utilizzo il touchscreen?
Nel caso qualcuno stesse pensando di suggerirlo, non voglio usare lo sniffing dello user-agent. Lo stesso dispositivo potrebbe avere sia un touchscreen che un mouse (forse non così comune oggi, ma molto di più in futuro). Non mi interessa il dispositivo, mi interessa come viene attualmente utilizzato: mouse o touchscreen.
Ho già provato agganciando i touchstart
, touchmove
, e touchend
gli eventi e chiamando preventDefault()
su ognuna di esse, che fa sopprimere il "cursore del mouse invisibile" per qualche tempo; ma se tocco rapidamente avanti e indietro tra due elementi diversi, dopo pochi tocchi inizierà a spostare il "cursore del mouse" e ad illuminare comunque gli effetti hover - è come se il mio preventDefault
non fosse sempre onorato. Non ti annoierò con i dettagli a meno che non sia necessario - non sono nemmeno sicuro che sia l'approccio giusto da adottare; se qualcuno ha una soluzione più semplice, sono tutt'orecchi.
Modifica: può essere riprodotto con CSS standard di bog :hover
, ma ecco una rapida riproduzione per riferimento.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Se passi il mouse su una delle caselle, verrà visualizzato uno sfondo blu, che voglio. Ma se tocchi una delle caselle, verrà visualizzato anche uno sfondo blu, che è la cosa che sto cercando di evitare.
Ho anche pubblicato un esempio qui che fa quanto sopra e aggancia anche gli eventi del mouse di jQuery. Puoi usarlo per vedere che anche gli eventi di tocco verranno attivati mouseenter
,mousemove
e mouseleave
.