Hammer.js: Как обнаружить щепотку с любым количеством / несколькими пальцами

Когда я создаю новое событие Hammer Pinch и не упоминаю количество указателей в опциях, он обнаруживает максимум 3 пальца, и если я упоминаю указатели, например

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

Затем он обнаруживает только 4-х пальцев. Я пытался искать в документах и ​​везде, но не смог обнаружить щепотку с 2, 3 или даже 10 пальцами с одним событием. Мне это нужно, так как мое веб-приложение должно работать на экранах размером до 81".

2 ответа

Решение

Ну, я наконец-то решил это! Я не знаю, если это взломать, но это работает! В конце концов, решение было довольно простым, и оно должно было установить опцию указателей на 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 для события пинч, и вот, это сработало!

PinchRecognizer проверяет количество указателей на то, что вы указали. (Это на самом деле проверено в суперклассе AttrRecognizer) Поэтому на самом деле удивительно, что вы обнаруживаете 3 указателя, когда не указываете параметр указателей, поскольку по умолчанию установлено значение 2.

Во всяком случае, я вижу два решения. Один из них - написать свой собственный распознаватель Pinch. Просто посмотрите в исходном коде hammer.js и измените существующий, на самом деле он меньше экрана. attrTest Функция - это то, что вы ищете. Не вызывайте метод super (который проверяет количество указателей), просто убедитесь, что количество указателей меньше или равно тому, что вы хотите.

Более простое решение - определить 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 связать все распознаватели вместе.

Другие вопросы по тегам