TouchEvent.touches.length всегда возвращает 1 на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 TouchEvent.touches.length всегда возвращает 1 на Android

Сообщение Anonymous »

Я впервые сталкиваюсь с сенсорными устройствами, и для реализации некоторых основных функций на моем веб-сайте/веб-приложении мне потребуется управлять событиями касания.


В ходе работы моего приложения, после динамического создания 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}
}
});
}
...
Когда я запускаю его с помощью Safari на iOS (IPad 2), если я прикасаюсь к нему одним, двумя (или более — до 9) пальцами, я получаю: из оператора предупреждения используется правильное количество пальцев, и приложение затем корректно запускается, если я коснулся двумя пальцами, в случае переключателя: 2.

Но когда я использую устройство 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);
}
});
и я всегда получаю «1», поэтому она всегда вызывается только функцией handle_one_touch(e).


Как следствие, я думаю, свойство измененныхTouches.length всегда равно «1».


Кто-нибудь знает, существует ли известная проблема по этому поводу на устройствах Android и/или как ее решить?

Заранее спасибо, Федерико

Подробнее здесь: https://stackoverflow.com/questions/429 ... on-android
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • TouchEvent.touches.length всегда возвращает 1 на Android
    Anonymous » » в форуме IOS
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Разъяснение по поводу `length = prefixTable[length - 1]` и `length = length - 1` в алгоритме KMP.
    Anonymous » » в форуме JAVA
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Разъяснение по поводу `length = prefixTable[length - 1]` и `length = length - 1` в алгоритме KMP.
    Anonymous » » в форуме JAVA
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Разъяснение по поводу `length = prefixTable[length - 1]` и `length = length - 1` в алгоритме KMP.
    Anonymous » » в форуме JAVA
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Есть ли какое-либо преимущество у int i = array.length перед двойным вызовом array.length?
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»