首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何区分鼠标的“单击”和“拖动”

如何区分鼠标的“单击”和“拖动”
EN

Stack Overflow用户
提问于 2011-05-18 17:00:31
回答 16查看 196.9K关注 0票数 189

我使用jQuery.click来处理拉斐尔图形上的鼠标点击事件,同时,我需要处理鼠标的drag事件,鼠标拖动由拉斐尔中的mousedownmouseupmousemove组成。

很难区分clickdrag,因为click也包含mousedownmouseup,我如何在Javascript中区分鼠标“点击”和鼠标“拖动”呢?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2011-05-18 17:03:17

我认为不同之处在于,在拖动时mousedownmouseup之间存在mousemove,而不是在单击时。

你可以这样做:

代码语言:javascript
复制
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)

票数 212
EN

Stack Overflow用户

发布于 2018-06-27 03:04:19

更干净的ES2015

代码语言:javascript
复制
let drag = false;

document.addEventListener('mousedown', () => drag = false);
document.addEventListener('mousemove', () => drag = true);
document.addEventListener('mouseup', () => console.log(drag ? 'drag' : 'click'));

没有遇到任何bug,正如其他人评论的那样。

票数 44
EN

Stack Overflow用户

发布于 2013-12-30 08:28:49

如果您已经在使用jQuery:

代码语言:javascript
复制
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);
  });
});
票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6042202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档