2012-04-04 14 views
7

Próbuję przeciągnąć/upuścić jQuery, aby ładnie współpracować z wydarzeniami dotykowymi iPada. Znalazłem ten kod na stronie internetowej:Obsługa zdarzeń dotykowych na iPadzie dla draggables/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(); 
} 

Wydaje się działać prawidłowo, jeśli Załączam touchHandler do document touchstart/MOVE/końca, ale to nie rodzimy powiększanie/przewijanie na iPadzie jest dozwolone, więc jestem próbując po prostu dołączyć ten handler do samych draggables.

Problem, który widzę z tym, że event.changeTouches jest zawsze niezdefiniowany z jakiegoś powodu, ponieważ możesz być świadkiem w http://jsfiddle.net/myLj2/1/. Nie mogę wymyślić powodu, dla którego zdarzenie dotykowe będzie zawsze mieć niezdefiniowaną właściwość, a z tego powodu ten kod nie będzie działał. jakieś pomysły?

Odpowiedz

9

Wyjaśniałem to po odkryciu Does jQuery preserve touch events properties?.

Okazuje się, że zdarzenie jQuery nie kopiuje na własność changeTouches, więc trzeba użyć originalEvent własność jQuery jQuery lub pominąć wszystko razem i wiążą się z funkcją jak addEventListener

+0

Wystarczy zapisać mój dzień! –

Powiązane problemy