Hammer.js水龙头在Android缓慢



情况:在Cordova跨平台移动应用上使用hammer.js 2.0.4, jQuery 2.1。我遇到了点击事件延迟的问题,所以我想我应该尝试一下hammer.js。它在我的iPad上运行得很好,但在我的Android手机(Android v4.4)上却很糟糕:反应很慢,经常完全错过点击。

我实现了我自己的小点击检测(使用mouseUp事件),它在我的Android上表现得比Hammer.js好得多(但在我的iPad上表现得很糟糕)。

所以我的问题是:在Android上是否有已知的hammer.js问题,或者已知的解决方法?我真的不喜欢根据平台有条件地使用两种不同的方法,特别是当我没有办法测试所有可能的移动平台时。

hammer.js的tap代码示例;没有什么有趣的事情发生:

    $(".menuitem").each( function(i, elem) {
      var mc = new Hammer.Manager(elem);
      mc.add(new Hammer.Tap());
      mc.on("tap", action);
    });

此外,还有一个覆盖整个页面的顶层滑动识别器:

    var swipelistener = new Hammer($("body")[0], {
        recognizers: [[Hammer.Swipe,{ direction: Hammer.DIRECTION_RIGHT }]]
    });
    swipelistener.on("swipe", swipeRight );

总共将有少于24个元素响应点击事件,并且没有重叠或嵌套的元素。我认为这可能与滑动识别器与点击识别器重叠有关,但删除滑动侦听器根本没有改变点击行为。

您需要使用每个识别器的设置。

hammertime.get('swipe').set({
    direction: hammer.DIRECTION_ALL, threshold: 1, velocity: 0.1
});

这对我在4.1.1的滑动工作如果有人可以为tap写一些示例代码将非常有帮助,因为我还在摆弄它。

同样,您也不需要mc.add,因为默认情况下管理器拥有所有的识别器。你只需要在手动删除(使用mc.remove)一个后使用.add。

如果你不确定任何识别器有什么设置,看看他们的网站,例如http://hammerjs.github.io/recognizer-swipe/显示我可以设置方向,阈值和速度等按照上面的代码。

正如我所看到的,你需要在没有任何特定选项的情况下检测整个屏幕上的滑动。也许cordova-android-gestures(仅适用于Android)能帮到你?这个插件"捕捉"整个设备表面的手势。因此,对于detect swipes:

//check the platform
if (device.platform=="Android") {
    MegaduckGestures.swiper(function(direction){
        switch (direction) {
            case 'rightSwipe': 
                //do your staff
                break;
            case 'leftSwipe': 
                //do your staff
                break;
            default: break;
        }
    });
}
else {
    //use your iPad approach
}

和处理点击菜单项:

$(".menuitem").each( function(i, elem) {
    //check the platform
    if (device.platform=="Android") {
        MegaduckGestures.swiper(function(direction){
            if (direction=='singleTap') {
                //do your staff
            }
        });
    }
    else {
        //use your iPad approach
    }
});

最新更新