禁用HammerJS在计算机上的滑动和拖动事件?(即禁用鼠标事件?)

Disable HammerJS swipe and drag events on computer? (i.e. disable on mouse events?)

本文关键字:事件 鼠标 拖动 计算机 HammerJS 禁用      更新时间:2023-09-26

我在这里使用Hammer.js:
http://eightmedia.github.io/hammer.js/

和我设置/创建Hammer对象如下:

var hammertime = Hammer(document.body)
                      .on("pinchin drag swipe", function(event) {
                        var alpha_value = $( "#collide_alpha" ).slider( "option", "value" );
                        var beta_value = $( "#collide_beta" ).slider( "option", "value" );
                        if(alpha_value < 50) {
                          $( "#collide_alpha" ).slider( "value", ~~(+alpha_value+(event.gesture.distance/30)) );
                        } else if(alpha_value <= 100) {
                          $( "#collide_alpha" ).slider( "value", ~~(+alpha_value-(event.gesture.distance/30)) );
                        }
                        if(beta_value < 50) {
                          $( "#collide_beta" ).slider( "value", ~~(+beta_value+(event.gesture.distance/30)) );
                        } else if(beta_value <= 100) {
                          $( "#collide_beta" ).slider( "value", ~~(+beta_value-(event.gesture.distance/30)) );
                        }
                      });

之后,我试着这样做:

// Try to disable the mouse movements on computer
hammertime.STOP_MOUSEEVENTS = true;
hammertime.NO_MOUSEEVENTS = true;

但是这不起作用,那么我应该如何禁用仅针对计算机的事件?但让它们在iPhone和Android上保持活跃。我现在不关心Windows 8的触摸屏,所以我不介意它不适用于那些。

我通常会在发射锤子之前尝试检测设备是否是触摸屏。最好只在需要的时候加载,而不是不需要的时候加载。

最常用的方法之一是

var is_touch_device = 'ontouchstart' in document.documentElement;

然后把你的锤子初始化包在

if(is_touch_device){
  // hammer stuff
}

如果您只关心几个设备,您也可以嗅探用户代理,但这可能有点笨拙,容易丢失一些东西。

我使用Modernizr来决定是否应该运行hammer:

     if ( Modernizr.touch )
     {
        $("#cr-stage").hammer().on( "swipeleft swiperight swipeup swipedown doubletap pinchin", gesture );
        $("#cr-stage").hammer().on( "release", releaseGesture );
     }

这比用户代理嗅探更可靠。