如何使用require.js的hammer.js插件

时间:2013-09-05 09:03:03

标签: requirejs hammer.js

我正在尝试使用带有require.js的hammer.js插件,但我没有运气。

这是我的代码:

requirejs.config({
  paths: {
      "jquery": ('__proto__' in {}) ? "lib/zepto" : "lib/jquery",
      "hammer-jquery": "lib/jquery.hammer",
      "hammer-showtouches": "lib/hammer.showtouches",
      "hammer-fakemultitouch": "lib/hammer.fakemultitouch"
  },
  shim: {
      "jquery": {
          exports: "$"
      },
      "hammer-showtouches": {
          deps: [ "hammer-jquery" ],
          exports: "Hammer.plugins.showTouches"
      },
      "hammer-fakemultitouch": {
          deps: [ "hammer-jquery" ],
          exports: "Hammer.plugins.fakeMultitouch"
      }
  },
  waitSeconds: 30
});

requirejs(["jquery","hammer-jquery","hammer-showtouches","hammer-fakemultitouch"], function ($,Hammer) {
    $(function(){
      if(!Hammer.HAS_TOUCHEVENTS && !Hammer.HAS_POINTEREVENTS) {
            Hammer.plugins.showTouches();
            Hammer.plugins.fakeMultitouch();
          }
    });
});

这是错误:

Uncaught TypeError:无法读取undefined hammer.showtouches.js的属性'plugins':7

未捕获的TypeError:无法读取未定义的require.js的属性'plugins':8

Uncaught TypeError:无法读取undefined hammer.fakemultitouch.js的属性'plugins':7

未捕获的TypeError:无法读取未定义的require.js的属性'plugins':8

我试图在没有运气的情况下将Hammer包含在shim配置中(因为jquery.hammer的最新版本与AMD兼容,所以没有必要)。

2 个答案:

答案 0 :(得分:2)

您的问题似乎是hammerjs插件未包含{em> 所需的hammerjs jquery库。

要解决此问题,您需要在requirejs路径中添加类似'hammer':'lib/hammerjs/dist/hammer.min',

的内容

此外,这里有一些关于我如何将hammerjsrequirejs一起使用的相关信息。

就我而言,我希望它与backbonerequirejs一起使用。我用bower安装了库。

bower install --save hammerjs
bower install --save backbone.hammer

然后,我继续添加RequireJS配置:

  • 我注意到jquery.hammer.js是AMD并且自动需要jquery。它也默默地依赖于Hammer。它修改jquery以支持Hammer。不需要垫片。

  • 我注意到hammerjs是AMD并自动导出Hammer。不需要垫片。

  • 我注意到backbone.hammer是AMD,自动需要underscorebackbonehammer。它修改了Backbone来支持Hammer。不需要垫片。

因此,我的配置仅使用路径(因为不需要垫片支持):

require.config({
    'baseUrl':'',
    'paths':{
        'underscore':'js/lib/underscore-amd/underscore-min',
        'backbone':'js/lib/backbone-amd/backbone-min',
        'jquery':'js/lib/jquery/jquery.min',
        'hammer':'js/lib/hammerjs/dist/hammer.min',
        'jquery-hammer':'js/lib/hammerjs/dist/jquery.hammer.min',
        'backbone-hammer':'js/lib/backbone.hammer/backbone.hammer'
    },
    shim:{
        'underscore': { exports: '_' },
        'backbone': { deps: ['underscore', 'jquery'], exports: 'Backbone' }
    }
});

答案 1 :(得分:0)

Wrap HammerJS然后绑定到全局窗口:

// @path utils/hammer
define([
  'hammer'
], function (Hammer) {
  window.Hammer = Hammer;
});

然后制作任何依赖于HammerJS的插件或模块取决于utils/hammer