我使用jQuery.click
来处理拉斐尔图形上的鼠标点击事件,同时,我需要处理鼠标的drag
事件,鼠标拖动由拉斐尔中的mousedown
、mouseup
和mousemove
组成。
很难区分click
和drag
,因为click
也包含mousedown
和mouseup
,我如何在Javascript中区分鼠标“点击”和鼠标“拖动”呢?
发布于 2011-05-18 17:03:17
我认为不同之处在于,在拖动时mousedown
和mouseup
之间存在mousemove
,而不是在单击时。
你可以这样做:
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)
发布于 2018-06-27 03:04:19
更干净的ES2015
let drag = false;
document.addEventListener('mousedown', () => drag = false);
document.addEventListener('mousemove', () => drag = true);
document.addEventListener('mouseup', () => console.log(drag ? 'drag' : 'click'));
没有遇到任何bug,正如其他人评论的那样。
发布于 2013-12-30 08:28:49
如果您已经在使用jQuery:
var $body = $('body');
$body.on('mousedown', function (evt) {
$body.on('mouseup mousemove', function handler(evt) {
if (evt.type === 'mouseup') {
// click
} else {
// drag
}
$body.off('mouseup mousemove', handler);
});
});
https://stackoverflow.com/questions/6042202
复制相似问题