javascript - 将 HammerJS 与 jQuery 结合使用

标签 javascript jquery hammer.js

在下方,我捕获容器并在左右滑动时触发点击,这是另一个功能来制作一些精美的动画爵士乐。

var element = document.getElementsByClassName('container');
var hammertime = new Hammer(element);
hammertime.on('swiperight', function(ev) {
  $('.btn-left').trigger('click');
});
hammertime.on('swipeleft', function(ev) {
  $('.btn-right').trigger('click');
});

我不断收到关于我包含的 Hammerjs 库的错误 (http://hammerjs.github.io/dist/hammer.min.js) Uncaught TypeError: a.addEventListener is not a function

我做了一些研究,发现了另一个 stackoverflow 问题,它说我不能通过 Hammerjs 传递 jQuery,因此我应该使用 jQuery Hammer。我看了一下repo,已经快两年没更新了。

我是否需要使用 jQuery Hammer ( https://github.com/hammerjs/jquery.hammer.js ) 扩展,或者我可以在不需要它的情况下通过 jQuery。

最佳答案

问题是 new Hammer() 需要一个元素,而 getElementsByClassName 返回一个 NodeList

如果你把它改成

var hammertime = new Hammer(element[0])

这应该按预期工作,因为您将传递匹配 .container 的第一个元素。如果你想将它绑定(bind)到所有具有 .container 类的元素,你需要自己循环遍历它们。我很少将 jQuery 用于任何事情,所以我通常包含这个小辅助函数来循环遍历 NodeLists

function doToAll(elems, fn){
  var len = elems.length
  while(--len > -1){
    fn(elems[len])
  }
}

在这种情况下,您可以像这样使用它:

doToAll(document.getElementsByClassName('container'), function(element){
  var hammertime = new Hammer(element)
  //add in the rest of your functionality
})

关于javascript - 将 HammerJS 与 jQuery 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800257/

相关文章:

javascript - 使用 Fabric.js 删除所有选定的对象

angular - 锤子 : enable vertical scroll with horizontal swipe

javascript - Hammer.js 阻止 Android Webview 中的超链接点击

javascript - Meteor 和 Hammer JS 包的跟踪器 afterFlush 错误

php - 新的 Google ReCaptcha 实现和提交前检查

javascript - Lightbox_me 的关闭按钮

javascript - 有没有办法获取和解析重定向请求的响应?

javascript - 将函数作为这样的函数的参数在语法上可以接受吗?

javascript - 将两个变量加在一起?

javascript - 向 Eclipse/JSDT 指定 Javascript 变量的类型