3

我正在使用这里找到的 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 触摸屏,所以我不介意它不适用于这些触摸屏。

4

2 回答 2

3

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

最受支持的方法之一是

var is_touch_device = 'ontouchstart' in document.documentElement;

然后只需将您的锤子初始化包装在

if(is_touch_device){
  // hammer stuff
}

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

于 2013-05-22T08:15:19.110 回答
1

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

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

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

于 2013-05-23T15:55:08.110 回答