2012-04-04 7 views
7

iPadのタッチイベントでうまく動作するようにjQueryドラッグ/ドロップを取得しようとしています。私は、インターネット上でこのコードを見つけました:draggables/droppables(未定義のchangedTouches)のiPadタッチイベントの処理

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(); 
} 

私がdocument touchstart /移動/最後にtouchHandlerを添付する場合は正常に動作するように見えるが、その後、ネイティブズーム/スクロールiPad上では許可されませんので、私はこのハンドラをドラッグ可能オブジェクトにアタッチするだけです。

event.changeTouchesは、http://jsfiddle.net/myLj2/1/で目にすることができるため、何らかの理由で常に未定義です。タッチイベントが常に定義されていないchangeTouchesプロパティを持つ理由が思いつきません。そのため、このコードは機能しません。何かご意見は?

答えて

9

Does jQuery preserve touch events properties?を発見した後でわかりました。

それはあなたがjQueryのoriginalEventプロパティを使用するか、またはすべて一緒にjQueryをスキップしてaddEventListener

+0

はちょうど私の一日保存されたように機能と結合するか持っているので、jQueryのイベントは、changeTouchesプロパティをコピーしないことが判明! –