it-swarm.com.de

Gibt es eine Entsprechung zur e.PageX-Position für 'touchstart' -Ereignisse wie für click -Ereignisse?

Ich versuche, die X-Position mit jQuery eines Touchstart-Ereignisses zu ermitteln, das mit der Live-Funktion verwendet wird.

Das heißt.

$('#box').live('touchstart', function(e) { var xPos = e.PageX; } );

Dies funktioniert nun mit "Klick" als Ereignis. Wie um alles in der Welt (ohne das alpha jQuery Mobile) bekomme ich es mit einem Touch-Ereignis?

Irgendwelche Ideen?

Vielen Dank für jede Hilfe.

100
waxical

Ein bisschen spät, aber Sie müssen auf das ursprüngliche Ereignis zugreifen, nicht auf das mit jQuery massierte. Da es sich um Multitouch-Ereignisse handelt, müssen noch weitere Änderungen vorgenommen werden:

$('#box').live('touchstart', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});

Wenn Sie andere Finger möchten, können Sie diese in anderen Indizes der Berührungsliste finden.

UPDATE FÜR NEUERE JQUERY:

$(document).on('touchstart', '#box', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});
173
mkoistinen

Ich benutze diese einfache Funktion für JQuery-basierte Projekte

    var pointerEventToXY = function(e){
      var out = {x:0, y:0};
      if(e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel'){
        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
        out.x = touch.pageX;
        out.y = touch.pageY;
      } else if (e.type == 'mousedown' || e.type == 'mouseup' || e.type == 'mousemove' || e.type == 'mouseover'|| e.type=='mouseout' || e.type=='mouseenter' || e.type=='mouseleave') {
        out.x = e.pageX;
        out.y = e.pageY;
      }
      return out;
    };

beispiel:

$('a').on('mousedown touchstart', function(e){
  console.log(pointerEventToXY(e)); // will return obj ..kind of {x:20,y:40}
})

hoffe das wird nützlich für dich;)

42
Nedudi

Ich habe einige der anderen Antworten hier ausprobiert, aber originalEvent war ebenfalls undefiniert. Bei der Überprüfung wurde eine mit TouchList klassifizierte Eigenschaft gefunden (wie von einem anderen Poster vorgeschlagen), und es gelang, auf folgende Weise zu pageX/Y zu gelangen:

var x = e.changedTouches[0].pageX;
11
matt.chatterley

Wenn Sie jQuery nicht verwenden, müssen Sie auf eines der TouchLists des Ereignisses zugreifen, um ein Touch -Objekt mit pageX/YclientX/Y etc.

Hier sind Links zu den relevanten Dokumenten:

Ich benutze e.targetTouches[0].pageX in meinem Fall.

6
Scott Jungwirth

Überprüfen Sie Safari Entwicklerreferenz auf Touch-Klasse .

Demnach sollte pageX/Y verfügbar sein - vielleicht sollten Sie die Rechtschreibung überprüfen? stelle sicher, dass es pageX und nicht PageX ist

0
Tom Tu