在敲击Hammer.js后检测一个平底锅,称之为双击并平移

时间:2016-02-22 14:27:41

标签: javascript gesture hammer.js

我试图用HammerJS检测双击和平移(轻按一次,然后按,移动和释放),但我不知道该怎么做。我阅读了文档,但我不明白我怎么也找不到一个简单的"潘与'#34; double"点击并平移。

实际上我可以使用以下代码检测它,但我想知道是否有更好的解决方案。

    var gestureManager = new Hammer.Manager( this.canvas, {
        recognizers: [
            [ Hammer.Tap ],
            [ Hammer.Pan ],
            [ Hammer.Pan, { event: 'panend' } ]
        ]
    );

    gestureManager.on( 'tap', ( ev ) => {
        this.tapTime = new Date().getTime();
    });

    gestureManager.on( 'pan', ( ev ) => {
        var panTime = new Date().getTime();

        if ( panTime - this.tapTime < 750 ) {
            this.isDragEnabled = true;

            ...
        }
    });

    gestureManager.on( 'panend', ( ev ) => {
        if ( this.isDragEnabled ) {
            ...
            this.isDragEnabled = false;
        }
    });

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我做过类似的事情,试图在触摸持续一段时间后检测到一个平底锅。它基于您可以启用和禁用识别器的事实。

var shortPress = new Hammer.Press({
    time: 500, // how long to press before you can start dragging
    event: 'shortPress'
});
var pan = new Hammer.Pan({ event: 'pan', enable: false });

var mc = new Hammer.Manager(element);
mc.add(shortPress);
mc.add(pan);

mc.on("shortPress", function(ev) {
    pan.set({ enable: true });
});

mc.on("pan", function(ev) {
    // do whatever you need
});

// don't forget to disable the pan recognizer when the dragging ends
mc.on("panend pancancel shortPressup", function(ev) {
    pan.set({ enable: false });
});

但是对于你的双击和平移场景,我认为它更复杂,因为你不能只用一个带有2个水龙头的水龙头来切换按下识别器,因为只有在你拿起它时才能检测到它。手指。因此,它会更像是检测一个水龙头,启用平移,但如果在一定时间后没有启动,则设置超时以禁用它。但是你已经这样做了,在这种情况下你的代码似乎更简单。

顺便说一句,您可能还希望在平移前允许按下,以便在您点按两次时保持该情况,但保持手指静止一段时间,然后才移动它。