Hammer.js:如何检测使用任意数量/多个手指的缩放手势

5

当我创建一个新的 Hammer Pinch 事件时,如果在选项中不提及触点数量,它只能检测到最多3个手指。但是,如果我提及触点,例如:

var multiPinch = new Hammer.Pinch({event: 'multipinch', pointers: 4, threshold: 0});

如果仅使用该方法,它只能检测四指捏的手势。我已经在文档和其他地方尝试搜索过了,但是无法使用一个事件检测到两个、三个甚至十个手指的捏手势。由于我的Web应用程序需要在高达81英寸的屏幕上运行,所以我需要这种功能。

2个回答

6
我终于解决了它!我不知道这是否是一种黑客行为,但它有效!最终的解决方案相当简单,就是将指针选项设置为0,是零!
var multiPinch = new Hammer.Pinch({event: 'multipinch', pointers: 0, threshold: 0});

现在,“multipinch”事件可以检测到从2到10个指针的捏合手势。这受到了这里文档的启发:http://hammerjs.github.io/recognizer-pinch/,其中提到了指针选项。
| Option   | Default | Description                             |
|:--------:|---------|-----------------------------------------|
| pointers | 1       | Required pointers. 0 for all pointers.  |

所以,我尝试将指针选项设置为0,用于捏事件,结果它起作用了!


1

PinchRecognizer会检查指针的数量是否与您指定的完全相同。(实际上,这是在超类AttrRecognizer中进行的检查)因此,如果不指定指针参数并且检测到3个指针,那实际上就很令人惊讶,因为默认值是2。

无论如何,我看到两个解决方案。一个是编写自己的捏合手势识别器。只需查看hammer.js源代码并修改现有代码即可,它实际上不到一屏长。您要找的是attrTest函数。不要调用超级方法(检查指针数量),只需检查指针数量是否小于或等于您想要的数量即可。

另一个更简单的解决方案是为每个您想要的指针数量定义一个PinchRecognizer。因此,如果您想检测4个手指或更少,请像这样操作:

var mc = new Hammer.Manager(element);

mc.add(new Hammer.Pinch({ event: 'pinch2', pointers: 2, threshold: 0 }));
mc.add(new Hammer.Pinch({ event: 'pinch3', pointers: 3, threshold: 0 }));
mc.add(new Hammer.Pinch({ event: 'pinch4', pointers: 4, threshold: 0 }));

免责声明:我没有测试过这个。您可能需要调用recognizeWith将所有识别器链接在一起。

谢谢你的回答。我最终用另一种方法解决了它。请看看我的答案! - Parth
1
第二种解决方案似乎太繁琐了,因为我需要为2-10个指针编写识别器,然后处理它们。幸运的是,指针:0可以正常工作,否则我就需要修改Pinch识别器了。顺便说一句,看到检测到3个指针确实令人惊讶。 - Parth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接