Yo uso jQuery.click
para controlar el evento clic del ratón sobre el gráfico Rafael, por su parte, que necesito para manejar el ratón drag
caso, arrastrar el ratón consiste en mousedown
, mouseup
y mousemove
en la de Rafael.
Es difícil de distinguir click
y drag
porque click
también contiene mousedown
& mouseup
, ¿Cómo puedo distinguir el mouse "clic" y el mouse "arrastrar" luego en Javascript?
javascript
dom-events
Leem
fuente
fuente
mousedown
y enmouseup
lugar de escuchar elmousemove
evento para establecer una bandera. Además, solucionaría el problema mencionado por @mrjrdnthmsEn caso de que ya estés usando jQuery:
fuente
drag
. Un alcance adicional como dicen otros comentarios puede ser necesario aquí.evt
y la comparación con la posición de la segundaevt
, por lo que, por ejemplo:if (evt.type === 'mouseup' || Math.abs(evt1.pageX - evt2.pageX) < 5 || Math.abs(evt1.pageY - evt2.pageY) < 5) { ...
..on('mouseup mousemove touchend touchmove')
, y además no establece variables de posición. Gran solución!Cleaner ES2015
No experimenté ningún error, como otros comentan.
fuente
Esto debería funcionar bien. Similar a la respuesta aceptada (aunque usando jQuery), pero el
isDragging
indicador solo se restablece si la nueva posición del mouse difiere de la delmousedown
evento. A diferencia de la respuesta aceptada, eso funciona en versiones recientes de Chrome, dondemousemove
se dispara independientemente de si el mouse se movió o no.También puede ajustar la verificación de coordenadas
mousemove
si desea agregar un poco de tolerancia (es decir, trate los movimientos pequeños como clics, no como arrastre).fuente
Si tienes ganas de usar Rxjs :
Este es un clon directo de lo que @ wong2 hizo en su respuesta, pero se convirtió a RxJs.
También uso interesante de
sample
. Elsample
operador tomará el último valor de la fuente (elmerge
demousedown
ymousemove
) y lo emitirá cuando se emita el observable interno (mouseup
).fuente
Como mrjrdnthms señala en su comentario sobre la respuesta aceptada, esto ya no funciona en Chrome (siempre activa el mousemove), he adaptado la respuesta de Gustavo (ya que estoy usando jQuery) para abordar el comportamiento de Chrome.
La
Array.prototype.equals
función proviene de esta respuestafuente
[evt.pageX, evt.pageY].equals()
comando. Reemplacé eso con(evt.pageX === currentPos[0] && evt.pageY===currentPos[1])
, y todo estuvo bien. :)equals
código debe agregarse desde el enlace en la parte inferior de mi publicacióncurrentPos
elmousemove
? ¿No significa esto que tratarías algunos arrastres como clics?"mouseup"
aún mueves el mouse.Todas estas soluciones se rompen con pequeños movimientos del mouse o son demasiado complicadas.
Aquí hay una solución simple y adaptable que utiliza dos oyentes de eventos. Delta es la distancia en píxeles que debe mover horizontal o verticalmente entre los eventos arriba y abajo para que el código lo clasifique como un arrastre en lugar de un clic. Esto se debe a que a veces moverá el mouse o el dedo unos pocos píxeles antes de levantarlo.
fuente
delta
se usa para esto? Qué tiene que ver con tocar en un dispositivo móvil?delta
se usa para "Sería frustrante intentar hacer clic y obtener una operación de arrastre en su lugar debido a un movimiento del mouse de una marca"Usando jQuery con 5 píxeles x / y theshold para detectar el arrastre:
fuente
Si solo quiere filtrar el caso de arrastre, hágalo así:
fuente
Pure JS con DeltaX y DeltaY
Este DeltaX y DeltaY como lo sugiere un comentario en la respuesta aceptada para evitar la experiencia frustrante al intentar hacer clic y obtener una operación de arrastre debido a un movimiento del mouse de un solo clic.
fuente
Para una acción pública en un mapa OSM (coloque un marcador al hacer clic), la pregunta era: 1) cómo determinar la duración del mouse hacia abajo-> arriba (no se puede imaginar crear un nuevo marcador para cada clic) y 2) el mouse se mueve durante abajo-> arriba (es decir, el usuario está arrastrando el mapa).
fuente
Otra solución que usa para vanilla JS basada en clases usando un umbral de distancia
Y agregue a la clase (SOMESLIDER_ELEMENT también puede ser documento para ser global):
fuente
Si desea verificar el comportamiento de clic o arrastre de un elemento específico, puede hacerlo sin tener que escuchar el cuerpo.
fuente
de la respuesta de @Przemek,
fuente