2016-03-04 46 views
4

下面我抓住容器,並左右滑動我觸發一個點擊,這是另一個功能來做一些奇特的動畫爵士樂。與jQuery一起使用HammerJS

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.jsUncaught TypeError: a.addEventListener is not a function此錯誤。

我做了一些研究,發現另一個stackoverflow問題,說我不能通過jQuery通過Hammerjs因此我應該使用jQuery錘子。我查看了回購協議,並且近兩年未更新。

是否需要使用jQuery Hammer(https://github.com/hammerjs/jquery.hammer.js)擴展名,或者我可以在不需要它的情況下通過jQuery傳遞數據。

回答

5

問題是new Hammer()期待單個元素,getElementsByClassName返回NodeList

如果將其更改爲

var hammertime = new Hammer(element[0]) 

應該按預期工作,因爲你可以通過匹配.container第一要素。如果你想將它綁定到所有具有.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 
}) 
+0

或者,如果你永遠只能期望一個'.container',你可以用'document.querySelector('。container')'來獲取它。 – ajm