How to distinguish mouse "click" and "drag"
I use jQuery.click
to handle the mouse click event on Raphael graph, meanwhile, I need to handle mouse drag
event, mouse drag consists of mousedown
, mouseup
and mousemove
in Raphael.
It is difficult to distinguish click
and drag
because click
also contain mousedown
& mouseup
, How can I distinguish mouse "click" & mouse "drag" then in Javascript?
Solution 1:
I think the difference is that there is a mousemove
between mousedown
and mouseup
in a drag, but not in a click.
You can do something like this:
const element = document.createElement('div')
element.innerHTML = 'test'
document.body.appendChild(element)
let moved
let downListener = () => {
moved = false
}
element.addEventListener('mousedown', downListener)
let moveListener = () => {
moved = true
}
element.addEventListener('mousemove', moveListener)
let upListener = () => {
if (moved) {
console.log('moved')
} else {
console.log('not moved')
}
}
element.addEventListener('mouseup', upListener)
// release memory
element.removeEventListener('mousedown', downListener)
element.removeEventListener('mousemove', moveListener)
element.removeEventListener('mouseup', upListener)
Solution 2:
Cleaner ES2015
let drag = false;
document.addEventListener('mousedown', () => drag = false);
document.addEventListener('mousemove', () => drag = true);
document.addEventListener('mouseup', () => console.log(drag ? 'drag' : 'click'));
Didn't experience any bugs, as others comment.