我正在尝试创建一个能够同时处理多个触摸事件的Cordova应用程序。
因此,用户可以在移动滑块或触摸其他按钮的同时继续触摸按钮。
该应用程序将只在安卓系统上运行,更确切地说是在安卓4.1.2或更高版本上运行。我使用的是Cordova 3.1.0。
目前,我正在做以下事情,但运气不佳:
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady: function() {
app.handleSerial();
},
handleSerial: function() {
var tht = document.getElementById('manuel');
var speed1 = document.getElementById('rythme');
var speed2 = document.getElementById('melodie');
var speed3 = document.getElementById('sequenceur');
tht.addEventListener('touchstart', function(event) {
serial.write('1');
}, false);
tht.addEventListener('touchend', function(event) {
serial.write('0');
}, false);
speed1.addEventListener('touchstart', function(event) {
serial.write('2');
}, false);
speed2.addEventListener('touchstart', function(event) {
serial.write('3');
}, false);
speed3.addEventListener('touchstart', function(event) {
serial.write('4');
}, false);
var errorCallback = function(message) {
alert('Error: ' + message);
};
serial.requestPermission(
function(successMessage) {
alert(successMessage);
serial.open(
{baudRate: 9600},
function(successMessage) {
alert(successMessage);
},
errorCallback
);
},
errorCallback
);
}
};
但它不起作用,当触摸tht
按钮时,我不能触摸其他按钮来处理它们的事件。
知道吗?
谢谢!
最终做到了这一点,其中buttons
是最接近的共同祖先。效果不错。
var buttons = document.getElementById('buttons');
buttons.addEventListener('touchstart', function(event) {
for (var i = 0; i < event.touches.length; i++) {
var touch = event.touches[i];
var elem = document.elementFromPoint(touch.pageX, touch.pageY);
switch (elem.id) {
case 'manuel':
serial.write('1');
break;
case 'rythme':
serial.write('2');
break;
case 'melodie':
serial.write('3');
break;
case 'sequenceur':
serial.write('4');
break;
}
}
});
buttons.addEventListener('touchend', function(event) {
var contains = false;
for (var i = 0; i < event.touches.length; i++) {
var touch = event.touches[i];
var elem = document.elementFromPoint(touch.pageX, touch.pageY);
if (elem.id === 'manuel') contains = true;
}
if (!contains) serial.write('0');
});