判断mouse左键是否被按下?

 

今天有个需求要判断当前鼠标左键是否被按下,因为只有在此时才需要做一些特别的逻辑使代码运行正常,来完成正确的workflow。google了一下,还是在stackoverflow上找到一篇靠谱的文章,原文链接猛点此处。总结一下如下:

jQuery中的行为:

在mouse move事件中,查看当前鼠标左键、中键、右键状态时的情况:

no button pressed: e.which = 1 e.button = 0

left button pressed: e.which = 1 e.button = 0

middle button pressed: e.which = 2 e.button = 1

right button pressed: e.which = 3 e.button = 2

可以看到没有button按下和左键按下的时候,e.which和e.button的值是一样的,这样就导致冲突。

这里提到event.which,对于鼠标事件,1代表左键,2代表中键,3代表右键。同事对于键盘事件,我们同样可以用event.which来判断当前是哪个键。具体可以参考jQuery event.which。很显然在mouse move事件中,事情并不全是这样,当没有button被按下时,e.which=1,这是错误的。(笔者没有自己去试,也没有去看为什么会这样。)

解决方案

原文上给出了比较简单的解决方案,基本思路就是用一个全局的flag来记录当前左键的状态,贴上代码:

$(function() {

    var leftButtonDown = false; 

    $(document).mousedown(function(e){
    // Left mouse button was pressed, set flag
    if(e.which === 1) leftButtonDown = true;
    });


    $(document).mouseup(function(e){
    // Left mouse button was released, clear flag
    if(e.which === 1) leftButtonDown = false;
    });

    function tweakMouseMoveEvent(e){
    // Check from jQuery UI for IE versions < 9
    if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
        leftButtonDown = false;
    }

    // If left button is not set, set which to 0
    // This indicates no buttons pressed
    if(e.which === 1 && !leftButtonDown) e.which = 0;
    }

    $(document).mousemove(function(e) {
    // Call the tweak function to check for LMB and set correct e.which
    tweakMouseMoveEvent(e);

    $('body').text('which: ' + e.which);
    });

});

(全文完)

转载于:https://www.cnblogs.com/victorzhang/archive/2012/10/29/2744856.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值