我正在尝试使用带有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();
}
});
});
这是错误:
未捕获的TypeError:无法读取undefined hammer.showtouches.js的属性’plugins’:7
未捕获的TypeError:无法读取未定义的require.js的属性’plugins’:8
未捕获的TypeError:无法读取undefined hammer.fakemultitouch.js的属性’plugins’:7
未捕获的TypeError:无法读取未定义的require.js的属性’plugins’:8
我试图在没有运气的情况下将Hammer包含在shim配置中(由于jquery.hammer的最新版本与AMD兼容,因此没有必要).
最佳答案 您的问题似乎是您没有包含hammerjs jquery插件所需的hammerjs库.
要解决这个问题,你需要在你的requirejs路径中添加类似’hammer’的东西:’lib / hammerjs / dist / hammer.min’,
另外,这里有一些关于我如何使用hammerjs和requirejs的相关信息.
在我的情况下,我希望它与backbone和requirejs一起工作.我用凉亭安装了库.
bower install --save hammerjs
bower install --save backbone.hammer
然后,我继续添加RequireJS配置:
>我注意到jquery.hammer.js是AMD并且自动需要jquery.它也默默地依赖于Hammer.它修改jquery以支持Hammer.不需要垫片.
>我注意到hammerjs是AMD并自动导出Hammer.不需要垫片.
>我注意到backbone.hammer是AMD并且自动需要下划线,主干和锤子.它修改了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' }
}
});