Я разрабатываю простое ионное приложение, а часть приложения требует нажатия двух кнопок одновременно. Я построил эту логику так:как включить ионные события с несколькими касаниями
<!--yT stands for yourThumb, pT stands for partnersThumb -->
<a class="icon ion-qr-scanner lg-txt" on-hold="Global.thumbHoldManager('yT',true)" on-release="Global.thumbHoldManager('yT',false, true)"></a>
<a class="icon ion-qr-scanner lg-txt" on-hold="Global.thumbHoldManager('pT',true)" on-release="Global.thumbHoldManager('pT',false, true)"></a>
У меня есть метод на мой контроллер, который обрабатывает это событие с помощью службы Я создал
var globalCtrl = function (clickHandler, $timeout) {
var self = this;
this.clickHandler = clickHandler;
this.timeout = $timeout;
this.readyState = clickHandler.ready;
this.showInstruction = false;
clickHandler.watchForReady();
};
globalCtrl.prototype.thumbHoldManager = function(which, what, up) {
this.clickHandler.setClickState(which, what);
var self = this;
if (up) {
this.clickHandler.stopWatching();
}
if (!this.readyState) {
this.instruction = "Hold both thumbs in place to scan"
if (!this.showInstruction) {
this.showInstruction = true;
self.timeout(function() {
self.showInstruction = false;
}, 5000)
}
}
};
globalCtrl.$inject = ['clickHandler', '$timeout'];
clickHandler служба выставляет апи к частной объект, задача которого он должен отслеживать при нажатии кнопки, и когда обе кнопки нажаты для перехода к новому URL-адресу.
.factory('clickHandler', [
'$interval',
'$rootScope',
'$location',
function($interval, $rootScope, $location) {
// Service logic
// ...
var clickState = {
yT: false,
pT: false,
ready: false,
watching: false,
watcher: false
};
// Public API here
return {
setClickState: function(which, what) {
clickState[which] = what;
},
getClickState: function(which) {
return clickState[which]
},
getReadyState: function() {
return ((clickState.yT) && (clickState.pT));
},
watchForReady: function() {
var self = this;
clickState.watching = $interval(function() {
clickState.ready = self.getReadyState();
},50);
clickState.watcher = $rootScope.$watch(function() {
return clickState.ready
}, function redirect(newValue) {
if (newValue) {
self.stopWatching();
$location.path('/scan');
}
})
},
stopWatching: function() {
if (clickState.watching) {
$interval.cancel(clickState.watching);
clickState.watcher();
clickState.watching = false;
clickState.watcher = false;
}
}
};
}
])
Я не получаю никаких ошибок с этим кодом, все работает, как положено, наблюдатель регистрируется на событие удержания и незарегистрированные на событие выпуска. Но независимо от того, что я делаю, я не могу заставить телефон обнаруживать нажатие на обе кнопки. Это всегда одно или другое, и я не знаю, почему. Я не могу проверить это в браузере или эмуляторе, так как multi-touch не поддерживается, и если у вас нет трекпада с несколькими касаниями.
Возможный дубликат http://stackoverflow.com/questions/28770819/ionic-framework-how-to-detect-simultaneous-tap-gesture-with-two- finger-in-and – richbai90
ну, ответа пока нет, я уже разместил вопрос на ионных форумах и до сих пор не мог получить ответ. Позвольте мне поиграть с этим подробнее ... –