Yo uso jQuery.clickpara controlar el evento clic del ratón sobre el gráfico Rafael, por su parte, que necesito para manejar el ratón dragcaso, arrastrar el ratón consiste en mousedown, mouseupy mousemoveen la de Rafael.
Es difícil de distinguir clicky dragporque clicktambién contiene mousedown& mouseup, ¿Cómo puedo distinguir el mouse "clic" y el mouse "arrastrar" luego en Javascript?
javascript
dom-events
Leem
fuente
fuente

mousedowny enmouseuplugar de escuchar elmousemoveevento 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í.evty 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
isDraggingindicador solo se restablece si la nueva posición del mouse difiere de la delmousedownevento. A diferencia de la respuesta aceptada, eso funciona en versiones recientes de Chrome, dondemousemovese dispara independientemente de si el mouse se movió o no.También puede ajustar la verificación de coordenadas
mousemovesi 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. Elsampleoperador tomará el último valor de la fuente (elmergedemousedownymousemove) 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.equalsfunció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. :)equalscódigo debe agregarse desde el enlace en la parte inferior de mi publicacióncurrentPoselmousemove? ¿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
deltase usa para esto? Qué tiene que ver con tocar en un dispositivo móvil?deltase 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