hammer.js对象没有addEventListener方法。

17

我遇到了这个错误:Uncaught TypeError: Object [object Object] has no method 'addEventListener' hammer.js:168

我的代码如下:

<script type="text/javascript" src="js/hammer.js"></script>

设备就绪函数:

 var resim = $('#kaydir');

 Hammer(resim).on('swipeleft', function(ev){
     console.log('left: ', ev);
 });

看起来问题出在 hammer.js 上。我该怎么办?

2个回答

33
我想您的问题是您没有安装Hammer.js的jQuery插件GitHub)。
因此,您无法将jQuery对象传递到Hammer()函数中,您有两个选择:

使用jQuery插件

将我上面提供的jQuery插件添加到您的项目中,然后调用:
$('#kaydir').Hammer(...)

没有jQuery插件

只需传入元素而不是jQuery对象即可使用Hammer(),使用[0]

Hammer(resim[0]).on(...)

或者将您的resim变量更改为调用JavaScript的getElementById的结果。

var resim = document.getElementById('kaydir');
Hammer(resim).on(...)

@Andre Bulatov 这个答案是基于之前问题提供的信息。如果没有这些信息,这个答案只会是猜测。 - James Donnelly
1
Hammer(resim[0]).on(...) 运作良好,但当我需要将其应用于 resim 中的所有元素时该怎么办? - Madan Bhandari
1
@maddy 使用循环。for (var i = 0; i < resim.length; i++) { Hammer(resim[i]]).on(...) } - James Donnelly
@JamesDonnelly 当使用jQuery插件时,应该使用小写的“.hammer”(“$(...).hammer(...)”而不是“$(...).Hammer(...)”),否则在Google Chrome中会导致错误“$ (...).Hammer不是一个函数”。 - ltlBeBoy
2
将jQuery对象传递给Hammer()不起作用,无论Hammer的jQuery插件是否被拉取。但是只传递元素,例如答案中的 a=new Hammer($('.test')[0]) 就可以正常工作。 - Maciek Rek
显示剩余2条评论

3

如果您正在使用jQuery,应该使用jQuery Hammer版本并按以下方式使用:

var resim = $("#kaydir");
resim.hammer().on("swipeleft", function(ev) {
    console.log('left: ', ev);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接