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