情况:hammer.js 2.0.4,在Cordova跨平台移动应用程序上的jQuery 2.1。因为点击事件的延迟,我遇到了记录良好的(for example)问题,所以我想我会为此尝试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个元素响应tap事件,并且没有重叠或嵌套元素。我认为它可能与滑动识别器重叠水龙头识别器有关,但移除滑动侦听器并没有改变抽头行为。
答案 0 :(得分:1)
您需要使用每个识别器的设置。
hammertime.get('swipe').set({
direction: hammer.DIRECTION_ALL, threshold: 1, velocity: 0.1
});
这适用于我在4.1.1上滑动 如果有人可以为tap打一些示例代码,那将会非常有用,因为我还在摆弄它。
此外,您不需要mc.add,因为默认情况下,Manager具有所有识别器。您只需在手动删除(使用mc.remove)之后使用.add。
如果您不确定任何识别器的设置,请查看他们的网站,例如http://hammerjs.github.io/recognizer-swipe/表明我可以根据上面的代码设置方向,阈值和速度等。
答案 1 :(得分:0)
我可以看到你需要在没有任何特定选项的情况下检测整个屏幕上的滑动。也许cordova-android-gestures(仅适用于Android)对您有帮助吗?这个插件"捕获"总设备表面上的手势。因此,对于检测滑动:
//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
}
});