我正在尝试创建一个能够同时处理多个触摸事件的Cordova应用。
因此,用户可以在移动滑块或触摸其他按钮时继续触摸按钮。
该应用只能在Android上运行,更准确地说是Android 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
按钮时我无法触摸其他按钮以处理其事件。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
结束这样做,其中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');
});