2012-04-04 12 views
7

Estoy tratando de que jQuery drag/drop funcione bien con eventos táctiles de iPad. He encontrado este código en Internet:Manejo de eventos táctiles de iPad para arrastrables/droppables (undefined changedTouches)

function touchHandler(event) 
{ 
    var touches = event.changedTouches, 
     first = touches[0], 
     type = ""; 
    switch (event.type) 
    { 
     case "touchstart": type = "mousedown"; break; 
     case "touchmove": type = "mousemove"; break; 
     case "touchend": type = "mouseup"; break; 
     default: return; 
    } 

    //initMouseEvent(type, canBubble, cancelable, view, clickCount, 
    //   screenX, screenY, clientX, clientY, ctrlKey, 
    //   altKey, shiftKey, metaKey, button, relatedTarget); 

    var simulatedEvent = document.createEvent("MouseEvent"); 
    simulatedEvent.initMouseEvent(type, true, true, window, 1, 
           first.screenX, first.screenY, 
           first.clientX, first.clientY, false, 
           false, false, false, 0/*left*/, null); 

    first.target.dispatchEvent(simulatedEvent); 
    event.preventDefault(); 
} 

Parece que funciona bien si hay que adjuntar el touchHandler a la document touchstart/mover/final, pero entonces no zoom nativo/desplazamiento en el IPAD está permitido, así que estoy tratando de adjuntar este controlador solo a los juegos de arrastre.

El problema que estoy viendo con esto es que event.changeTouches siempre está indefinido por alguna razón, como se puede ver en http://jsfiddle.net/myLj2/1/. No puedo encontrar una razón por la cual un evento táctil siempre tendrá una propiedad changeTouches indefinida y, debido a ello, este código no funcionará. ¿Alguna idea?

Respuesta

9

Lo descubrí después de descubrir Does jQuery preserve touch events properties?.

Resulta que el evento jQuery no copia sobre la propiedad changeTouches, por lo que tiene para cualquiera que use la propiedad de jQuery jQuery originalEvent o saltar todos juntos y se unen con una función como addEventListener

+0

acaba de salvar mi día! –

Cuestiones relacionadas