В ходе работы моего приложения, после динамического создания div, я присоединяю к нему событие touchstart, вызывающее функцию, в которой я хочу управлять различными задачами в зависимости от количества одновременных касаний: для этого я подумал используйте touchEvent.changedTouches.length свойство
(https://developer.mozilla.org/en-US/doc ... gedTouches).
У меня есть что-то вроде этого:
Код: Выделить всё
$("body").append("Some text...");
touchEvents();
...
function touchEvents() {
var touches;
$("#myDiv").on("touchstart", function (e) {
touches = e.changedTouches;
alert(touches.length);
switch (touches.length) {
case 1:
{code_block_1}
break;
case 2:
{code_block_2}
break;
default:
{code_block_default}
}
});
}
...
Но когда я использую устройство Android (Я тестировал его на телефонах Samsung и NGM — как на старых, так и на новейших телефонах Android — либо с обновленными Firefox и Chrome) Я всегда получаю «1» при вызове alert() сразу после сенсорного запуска. событие, даже если я использую более одного пальца; следовательно, маршрут всегда проходит внутри переключателя. Вариант: 1.
Я обнаружил, что это происходит из-за странного поведения списка touchEvent.touches. .
На самом деле, если у меня есть следующий код
Код: Выделить всё
$("body").append("Some text...");
touchEvents();
...
function touchEvents() {
var touches;
$("#myDiv").on("touchstart", function (e) {
touches = e.touches;
alert(touches.length);
...
});
}
(когда пальцы двигаются вниз один за другим, я также получаю первое предупреждение с правильной надписью «1»)...
Первый (второй, если касание двух пальцев не одновременно) выдает «2», но сразу после закрытия это предупреждение, выдается еще одно с сообщением "1".
В качестве проверки я также попытался скопировать и вставить пример кода, который можно найти здесь:
https://developer.mozilla.org/en-US/doc ... nt/touches
добавление трех функций, которые предупреждают e.touches.length, т.е.
Код: Выделить всё
$(document).ready(function() {
document.getElementById("test").addEventListener('touchstart', function(e) {
// Invoke the appropriate handler depending on the
// number of touch points.
switch (e.touches.length) {
case 1: handle_one_touch(e); break;
case 2: handle_two_touches(e); break;
case 3: handle_three_touches(e); break;
default: console.log("Not supported"); break;
}
}, false);
function handle_one_touch(e) {
touches = e.touches;
alert(touches.length);
}
function handle_two_touch(e) {
touches = e.touches;
alert(touches.length);
}
function handle_three_touch(e) {
touches = e.touches;
alert(touches.length);
}
});
Как следствие, я думаю, свойство измененныхTouches.length всегда равно «1».
Кто-нибудь знает, существует ли известная проблема по этому поводу на устройствах Android и/или как ее решить?
Заранее спасибо, Федерико
Подробнее здесь: https://stackoverflow.com/questions/429 ... on-android