【问题标题】:Catching events for mousewheel when Firefox is autoscrollingFirefox 自动滚动时捕获鼠标滚轮事件
【发布时间】:2013-07-16 15:19:48
【问题描述】:

我知道有很多问题询问如何防止 Firefox 在页面大于视口并且您按下鼠标中键时激活的自动滚动模式。

但我真正需要的只是能够在自动滚动处于活动状态时检测到 mouseup 事件。该事件似乎没有传播,所以我不知道鼠标按钮何时(更重要的是在何处)被释放。

我也可以满足于检测自动滚动模式何时消失并且鼠标使用恢复正常。

我准备了一个Plunk 来玩。启动时,在任意位置单击鼠标中键,框中的文本将更新。如果按下按钮,页面会添加更多内容:中键将激活自动滚动,mouseup 事件将永远丢失。

Link

【问题讨论】:

    标签: javascript jquery firefox mouseevent jquery-events


    【解决方案1】:

    这会给出结果吗?

    $(selector).live('mouseup', function(e) { 
    
        if(e.which == 1) {
    
            alert("left");
    
        }if(e.which == 3) {
    
            alert("right button");
    
        }else if(e.which == 2) {
    
            alert("middle button"); 
    
        }
    
        e.preventDefault();
    
    });
    

    【讨论】:

    • .live 已被弃用并删除。
    • 这里也一样。第三个alert 在自动滚动时永远不会执行。
    【解决方案2】:
     $(document).ready(function(){
    
    $("your id").on('mousedown', function(e) { 
       if( (e.which == 1) ) {
         alert("left button");
       } else if( (e.which == 3) ) {
         alert("right button");
       } else if( (e.which == 2) ) {
          alert("middle button"); 
       }
       e.preventDefault();
    }).on('contextmenu', function(e){
       e.preventDefault();
    });
    });
    

    http://jsfiddle.net/p49nF/

    希望,这有帮助。!!!

    【讨论】:

    • 使用.on 而不是.bind -- 这是现在更标准的方式。
    • 点击似乎也没有传播。
    • @DekDekku:点击和滚动是两种不同的想法。滚动有不同的事件-->onmousewhell
    • @DekDekku:你想要滚动或点击什么?
    • 我对滚动不感兴趣。我对 mouseup 感兴趣,正如我的问题中所指定的那样。
    【解决方案3】:

    知道了。

    即使彼得的答案不正确,但它给了我正确的想法。

    由于某种原因,如果您在mousedown 处理程序中preventDefault()mouseup 将开始工作。

    $(document)
      .on("mousedown", function(e) {
          if (e.which !== 2) return;
          $("#h").text("MouseDown");
          e.preventDefault();
        }).on("mouseup", function(e) {
          if (e.which !== 2) return;
          $("#h").text("MouseUp");
        });
    

    Plunk with the solution

    【讨论】:

    • 很高兴,您得到了答案。如果有帮助,请 +1 给 pietrs。
    • 我也是:现在有一个更大的,但它可以等待:D 我看到你的小提琴也使用了 .preventDefault() 它只是没有重现我遇到的问题。
    • 解决方案很重要......不是他们的资源。祝你的项目好运
    • 一切都有其自身的重要性。 (谢谢。)
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多