我正在尝试将jQuery.Hammer.js与Zepto v1.1.3一起使用。但由于某种原因,我收到了这个错误:
Uncaught TypeError: undefined is not a function
以下是我的代码的一部分:
var element = $('#wrapper'); //document.getElementById('main');
console.log(element);
element.hammer({prevent_default: false, stop_browser_behavior: false}).on("dragleft"...
console.log(element)给了我:
[div#wrapper.hfeed, selector: "#wrapper", forEach: function, reduce: function, push: function, sort: function…]
导致这种情况的原因是什么?
答案 0 :(得分:2)
正如您在official documentation中看到的,语法略有不同:
var hammertime = new Hammer(myElement, myOptions);
hammertime.on('pan', function(ev) {
console.log(ev);
});
以你的方式使用它,即element.hammer...
你需要jQuery plugin for Hammer.js
这就是全部吗?不是真的,如果你查看这个插件的source,你会看到这两行:
第9行:jQuery(this.element).triggerHandler({
第25行:})(jQuery, Hammer, "hammer");
问题在于Zepto无法识别jQuery
。您可以按Zepto
重命名出现,但更好的解决方案是the one defined by gondo:
jQuery = Zepto;
$.fn.extend = function(obj) {
$.extend($.fn, obj);
};
您的代码将成为:
<script src="/path/to/zepto.js"></script>
<script src="/path/to/hammer.js"></script>
<script>
// We load this code _before_ jquery.hammer.js
jQuery = Zepto; // We just need this one line
</script>
<script src="/path/to/jquery.hammer.js"></script>
<script>
var element = $('#wrapper');
element.hammer({prevent_default: false, stop_browser_behavior: false}).on("dragleft", function(e)...
</script>