怎么区分鼠标是单击还是拖动?

js的鼠标事件

image.png

拖拽常用事件

onmousedown 鼠标按下触发事件
onmousemove 鼠标按下时持续触发事件
onmouseup 鼠标抬起触发事件

click点击事件=mouseup+mousedown
drag拖拽=mousedown+mousemove+mouseup

当鼠标在div上【移动】或者【按下左键拖动】的时候,都会触发onmousemove事件;

<div id="drag" οnmοusedοwn="down();" οnmοuseup="up();" οnmοusemοve="move();"></div>

问题:怎样区分鼠标是单击弹起还是拖动后弹起呢?
处理一:基于时间;
onmousedown中记录鼠标按下的位置,在onmouseup中记录鼠标弹起的位置,然后比较这2个位置的差距。
如果距离差距不大,则是鼠标【单击】后弹起;
如果距离相差较大,则是鼠标【拖动】后弹起。

<script>
  var timer = null
  var isDrag = false

  function down () {
    console.log('onmousedown')
    //由于onmousedown每次都会调用的,在这里初始化一下这个变量
    isDrag = false
    //延迟100ms
    timer = setTimeout(setDragTrue, 200)
  }

  function setDragTrue () {
    isDrag = true
  }

  function move () {
    //能够使用isDrag来推断是移动还是拖动
  }

  function up () {
    if (!isDrag) {
      //先清除timer
      clearTimeout(timer)
      console.log('onmouseup')
    } else {
      isDrag = false
      console.log('draging over.')
    }
  }

</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容