是否可以使用Hammer.js识别对角线滑动?
我已经完成了他们的文档,但没有找到任何关于对角线滑动或平移等的说法......
答案 0 :(得分:11)
具有大量关于手势的信息的对象被传递给每个Hammer.js事件回调(如here in the API docs所述)。
您正在寻找eventObject.angle
属性。其值介于 -180 和 180 之间( 0 表示正确, -90 表示UP, 90 表示DOWN, 180 表示LEFT)。
所以这里是你如何识别对角线滑动:
var hammertime = new Hammer(domElement);
hammertime.get("swipe").set({ direction: Hammer.DIRECTION_ALL });
hammertime.on("swipe", function(eventObject) {
if(eventObject.angle < -90) {
//UP-LEFT SWIPE...
} else if(eventObject.angle < 0) {
//UP-RIGHT SWIPE...
} else if(eventObject.angle < 90) {
//DOWN-RIGHT SWIPE...
} else {
//DOWN-LEFT SWIPE...
}
});
答案 1 :(得分:1)
对于那些希望使用HammerJS进行8种方式滑动(上,下,左,右,左上,左下,上,右,下右)选项的人。值得研究在一定范围内使用角度。左边的选项是唯一聪明的选项...因为它是OR语句而不是AND语句。
var hammertime = new Hammer(domElement);
hammertime.get("swipe").set({ direction: Hammer.DIRECTION_ALL });
hammertime.on("swipe", function(e) {
let jResult = '';
switch(true) {
// LEFT
case (e.angle < -157.5 || e.angle > 157.5):
jResult = 'left';
break;
// RIGHT
case (e.angle > -22.5 && e.angle < 22.5):
jResult = 'right';
break;
// UP
case (e.angle < -67.5 && e.angle > -112.5):
jResult = 'up';
break;
// Down
case (e.angle > 67.5 && e.angle < 112.5):
jResult = 'down';
break;
// LEFT-Up
case (e.angle < -112.5 && e.angle > -157.5):
jResult = 'left-Up';
break;
// LEFT-Down
case (e.angle > 112.5 && e.angle < 157.5):
jResult = 'left-Down';
break;
// RIGHT-Up
case (-22.5 > e.angle && e.angle > -67.5):
jResult = 'right-Up';
break;
// RIGHT-Down
case (e.angle > 22.5 && e.angle < 67.5):
jResult = 'right-Down';
break;
default:
// code block
jResult = 'unknown'; // UNKNOWN - what happened?
}
console.log('--00--> Swipe: ' + e.direction + ' -- Dir is: ' + jResult);
this.lastSwipe = jResult;
});
输出显示为控制台...您的里程可能有所不同。