我正在尝试使用带有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兼容,所以没有必要)。
答案 0 :(得分:2)
您的问题似乎是hammerjs
插件未包含{em> 所需的hammerjs jquery
库。
要解决此问题,您需要在requirejs
路径中添加类似'hammer':'lib/hammerjs/dist/hammer.min',
此外,这里有一些关于我如何将hammerjs
与requirejs
一起使用的相关信息。
就我而言,我希望它与backbone
和requirejs
一起使用。我用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,自动需要underscore
,backbone
和hammer
。它修改了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
。