javascript中区分鼠标单击和拖动事件

在javascript中,一般的DOM元素如div,都有onmousedown、onmousemove、onmouseup这3个鼠标事件。

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

 

当鼠标在div1上移动或者按下左键拖动的时候,都会触发onmousemove事件。怎样区分这2种事件呢?怎样区分鼠标单击弹起和拖动后弹起呢?区分鼠标单击弹起和拖动后弹起。能够注冊onmousedownonmouseup事件处理函数,在onmousedown中记录鼠标按下的位置,在onmouseup中记录鼠标弹起的位置,然后比較这2个位置的差距。假设距离差距不大,则是鼠标单击后弹起;假设距离相差较大,则是鼠标拖动后弹起。

以下介绍的是使用setTimeout来实现。

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

<script type="text/javascript">
    var timmerHandle = null;
    var isDrag = false;
    
    function down()
    {
    	console.log("mouse down.");
        //由于mouseDownFun每次都会调用的,在这里又一次初始化这个变量
        isDrag = false;
    	
        //延迟100ms
        timmerHandle = setTimeout(setDragTrue,200);
    }
    
    function setDragTrue()
    {
    	isDrag = true;
    }
	
    function move()
    {
	//能够使用isDrag来推断是移动还是拖动
    }
    
    
    function up()
    {
    	
        if (!isDrag)
        {
    	    //先把doMouseDownTimmer清除。不然200毫秒后setGragTrue方法还是会被调用的
            clearTimeout(timmerHandle); 
            console.log("mouse up.");
        }
    	else
    	{
    	    isDrag = false;
    	    console.log("draging over.");
    	}
    } 
</script>

 

使用setTimeout这样的是基于时间的做法,使用坐标是基于空间的做法。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值