TouchEvent.touches.length gibt unter Android immer 1 zurückAndroid

Forum für diejenigen, die für Android programmieren
Guest
 TouchEvent.touches.length gibt unter Android immer 1 zurück

Post by Guest »

Es ist das erste Mal, dass ich mit Touch-Geräten zu tun habe, und um einige grundlegende Funktionen in meiner Website/Webanwendung zu implementieren, müsste ich Touch-Ereignisse verwalten.


Im Ablauf meiner Anwendung füge ich, nachdem ich dynamisch ein Div erstellt habe, ein Touchstart-Ereignis hinzu, das eine Funktion aufruft, in der ich je nach Anzahl gleichzeitiger Berührungen verschiedene Aufgaben verwalten möchte: Um dies zu tun, habe ich mir das überlegt Verwenden Sie die Eigenschaft touchEvent.changedTouches.length
(https://developer.mozilla.org/en-US/doc ... gedTouches).


Ich habe etwas so:

Code: Select all

$("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}
}
});
}
...
Wenn ich es mit Safari auf iOS (iPad 2) ausführe und es mit einem, zwei (oder mehr – bis 9) Fingern berühre, erhalte ich Folgendes: aus der Warnungsanweisung die korrekte Anzahl der verwendeten Finger und die Anwendung wird dann korrekt ausgeführt, wenn ich eine Zwei-Finger-Berührung vorgenommen habe, im Schaltergehäuse: 2.

Aber wenn ich ein Android-Gerät verwende (Ich habe es mit einem Samsung- und einem NGM-Handy getestet – entweder älteren und neuesten Android-Handys – entweder mit aktualisiertem Firefox und Chrome) Ich erhalte immer „1“ durch den Alert(), der direkt nach dem Touchstart aufgerufen wird Ereignis, auch wenn ich mehr als einen Finger benutze; Folglich verläuft die Route immer innerhalb des Schalters case: 1 option.


Ich habe herausgefunden, dass dies an einem seltsamen Verhalten der touchEvent.touches-Liste zu liegen scheint .


Tatsächlich, wenn ich den folgenden Code habe

Code: Select all

$("body").append("Some text...");
touchEvents();
...
function touchEvents() {
var touches;
$("#myDiv").on("touchstart", function (e) {
touches = e.touches;
alert(touches.length);
...
});
}
Wenn ich die Oberfläche mit zwei Fingern berühre (gleichzeitig oder nacheinander), erhalte ich immer zwei Benachrichtigungen!


(Wenn sich die Finger nacheinander nach unten bewegen, erhalte ich auch eine erste Warnung, die korrekterweise „1“ sagt)...


Der erste (der zweite, falls die Berührung mit zwei Fingern nicht gleichzeitig erfolgt) fordert „2“ auf, aber unmittelbar danach Wenn diese Warnung geschlossen wird, wird eine weitere mit der Eingabeaufforderung „1“ ausgelöst.


Zur Kontrolle habe ich auch versucht, den Beispielcode, der hier zu finden ist, zu kopieren und einzufügen :


https://developer.mozilla.org/en-US/doc ... nt/touches


Hinzufügen von drei Funktionen, die das alarmieren e.touches.length d.h.

Code: Select all

$(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);
}
});
und ich bekomme immer „1“, daher wird immer nur die Funktion handle_one_touch(e) aufgerufen.


Aus diesem Grund ist die Eigenschaft „changedTouches.length“ meiner Meinung nach immer „1“.


Weiß jemand, ob es ein bekanntes Problem zu diesem Problem auf Android-Geräten gibt und/oder wie man es lösen kann?

Vielen Dank im Voraus, Federico

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post