• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

153
Vistas
Detectar clic vs. toque en JavaScript

Sé que puede detectar si el navegador se está ejecutando en un dispositivo con pantalla táctil según esta respuesta: https://stackoverflow.com/a/4819886/589921

Pero sé que algunos dispositivos tienen una pantalla táctil y un mouse. ¿Puedo detectar la diferencia entre esos tipos de contacto? Esencialmente, quiero distinguir entre 3 eventos diferentes: onClick (que se activa al hacer clic o al tocar), onTouch (que se activa solo al tocar), onMouseClick (que se activa solo al hacer clic).

about 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar la propiedad pointerType en PointerEvent para detectar el tipo de entrada ( "mouse" , "touch" o "pen" ):

 element.addEventListener('pointerdown', (event) => { if (event.pointerType === "mouse") {} if (event.pointerType === "touch") {} if (event.pointerType === "pen") {} });

Si desea eventos específicos para cada tipo de clic, puede crear eventos personalizados :

 const mouse = new Event("mouseclick"); const touch = new Event("touch"); document.addEventListener("pointerdown", ({ pointerType, target }) => { if (pointerType === "mouse") target.dispatchEvent(mouse); if (pointerType === "touch") target.dispatchEvent(touch); }); const someElement = document.querySelector(".box"); someElement.addEventListener("mouseclick", () => { console.log("Clicked with mouse"); }); someElement.addEventListener("touch", () => { console.log("Touched with mobile device"); }); someElement.addEventListener("click", () => { console.log("Clicked by some device (we don't know)"); });
 .box { position: absolute; inset: 2em; background: darkred; padding: 1em; }
 <div class="box">A box with custom events</div>

(Nota: no probado en dispositivo de pantalla táctil)

Tenga en cuenta que si está utilizando React u otro marco, puede haber diferentes formas de crear eventos personalizados.

En React, por ejemplo, puedes implementar estos eventos con un enlace personalizado:

 const useClickEvents = ({ onMouseClick, onTouch, onClick }) => ({ onClick, onPointerDown({ pointerType }) { if (pointerType === "mouse") onMouseClick(); if (pointerType === "touch") onTouch(); }, }); function SomeComponent({ onClick, onMouseClick, onTouch, children }) { const clickEventProps = useClickEvents({ onClick, onMouseClick, onTouch }); return ( <div className="something" {...clickEventProps}> <p>Custom events on this thing</p> {children} </div> ); }
about 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda