Estoy escribiendo un sitio web destinado a ser utilizado tanto desde computadoras de escritorio como desde tabletas. Cuando se visita desde un escritorio, quiero que las áreas de la pantalla en las que se puede hacer clic se iluminen con :hover
efectos (color de fondo diferente, etc.) Con una tableta, no hay mouse, por lo que no quiero ningún efecto de desplazamiento.
El problema es que, cuando toco algo en la tableta, el navegador evidentemente tiene algún tipo de "cursor de mouse invisible" que se mueve a la ubicación que toqué y luego lo deja allí, por lo que lo que acabo de tocar se ilumina con un efecto de desplazamiento hasta que toque otra cosa.
¿Cómo puedo obtener los efectos de desplazamiento cuando estoy usando el mouse, pero suprimirlos cuando estoy usando la pantalla táctil?
En caso de que alguien estuviera pensando en sugerirlo, no quiero usar el rastreo de agentes de usuario. El mismo dispositivo podría tener una pantalla táctil y un mouse (tal vez no sea tan común hoy, pero mucho más en el futuro). No me interesa el dispositivo, me interesa cómo se utiliza actualmente: ratón o pantalla táctil.
Ya he intentado enganchar los touchstart
, touchmove
, y touchend
eventos y llamando preventDefault()
en todos ellos, lo que hace suprimir el "cursor del ratón invisible" una parte del tiempo; pero si toco rápidamente hacia adelante y hacia atrás entre dos elementos diferentes, después de algunos toques comenzará a mover el "cursor del mouse" e iluminará los efectos de desplazamiento de todos modos; es como si mi preventDefault
no siempre fuera un honor. No los aburriré con los detalles a menos que sea necesario; ni siquiera estoy seguro de que ese sea el enfoque correcto a seguir; si alguien tiene una solución más simple, soy todo oídos.
Editar: esto se puede reproducir con CSS estándar del pantano :hover
, pero aquí hay una reproducción rápida como referencia.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Si pasa el mouse sobre cualquiera de los cuadros, obtendrá un fondo azul, que quiero. Pero si toca cualquiera de las casillas, también obtendrá un fondo azul, que es lo que estoy tratando de evitar.
También publiqué una muestra aquí que hace lo anterior y también engancha los eventos del mouse de jQuery. Se puede utilizar para ver que los eventos Tap también se disparará mouseenter
, mousemove
y mouseleave
.