Quiero activar un menú contextual solo después de presionar el botón izquierdo del mouse durante N segundos (por ejemplo, 2 segundos).
Si se suelta el ratón, el menú contextual no debería mostrarse.
Traté de usar:
Pero no puedo obtener el comportamiento esperado.
Lo que obtengo es un retraso antes de mostrar el menú contextual por primera vez, pero:
¿Cómo puedo condicionar mostrar el menú contextual, solo después de hacer clic con el mouse durante un período de tiempo específico?
Gracias
Puedes alcanzarlo con esta solución.
const MouseDownDuration = class { setMouseDown() { this.downAt = new Date(); } setMouseUp() { this.upAt = new Date(); } get duration () { return this.upAt.getTime() - this.downAt.getTime() } } const contextMenu = new MouseDownDuration(); document.querySelector('#element').addEventListener('mousedown', (e) => { contextMenu.setMouseDown(); }); document.querySelector('#element').addEventListener('mouseup', (e) => { contextMenu.setMouseUp(); // Log the diff in milliseconds console.log(contextMenu.duration); // Eventually dispatch a custom event }); También puede ver cómo enviar un evento utilizando el elemento e.target consultando https://developer.mozilla.org/en-US/docs/Web/Events/Creating_and_triggering_events