jQuery Hammer.js似乎不适用于Zepto

时间:2014-05-30 16:33:18

标签: javascript jquery zepto hammer.js

我正在尝试将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…]

导致这种情况的原因是什么?

1 个答案:

答案 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>