本文简单记录下hammer.js的事件重叠与互斥问题,如有不当之处望指出,谢谢!

版本:Hammer.JS - v2.0.8

先说说recognizeWith,这个很好理解,就是可以同时辨识多重手势事件,比如,单击.recognizeWith(双击) 的情况下,点击两下,这会触发单击(调用两次单击回调)和双击事件(调用一次双击回调);

requireFailure的作用大家可以自己看原文,我的个人理解比如,在 单击.recognizeWith(双击) 然后 单击.requireFailure(双击) 的情况下,它会在第二次点击后,也就是双击后触发 单击的回调函数,而不会触发双击的回调,简单点理解就是满足单击的条件后,双击就不用管它了;

以下是实验代码,有需要的可以跑一下看看:

var doc = document;
(function(){
    var box = doc.getElementById("box");
    var hm = new Hammer.Manager(box);
    var singletap = new Hammer.Tap({event: 'singletap'});
    var doubletap = new Hammer.Tap({event: 'doubletap', taps: 2});

    var panh = new Hammer.Pan({event: 'panh', direction: Hammer.DIRECTION_HORIZONTAL});
    var panv = new Hammer.Pan({event: 'panv', direction: Hammer.DIRECTION_VERTICAL});
    var swipe = new Hammer.Swipe();

    hm.add([panh, panv, singletap, doubletap, swipe]);

    doubletap.recognizeWith(singletap);
    singletap.requireFailure(doubletap);
    //swipe.recognizeWith(panh);
    //panv.requireFailure(panh);
    //swipe.requireFailure(panh);
    //*
    hm.on('panh', function(e) {
        console.log('panh event');
        console.log(e);
    });
    hm.on('panv', function(e) {
        console.log('panv event');
        console.log(e);
    });
    //*/
    hm.on('doubletap', function(e) {
        console.log('doubletap event');
        console.log(e);
    });
    hm.on('singletap', function(e) {
        console.log('singletap event');
        console.log(e);
    });
    hm.on('swipe', function(e) {
        console.log('swipe event');
        console.log(e);
    });
})();

更多推荐

Hammer.js事件互斥重叠之requireFailure与recognizeWith