2012-04-04 10 views
7

मैं आईपैड टच इवेंट्स के साथ अच्छी तरह से काम करने के लिए jQuery ड्रैग/ड्रॉप प्राप्त करने की कोशिश कर रहा हूं। मैं इंटरनेट पर इस कोड को मिला:ड्रैगगैबल्स/ड्रॉपपैबल्स (अपरिभाषित बदले हुए टच) के लिए आईपैड टच इवेंट्स को संभालना

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 घटना changeTouches संपत्ति पर कॉपी नहीं है, इसलिए आप या तो jQuery के originalEvent संपत्ति का उपयोग करें या सभी को एक साथ jQuery छोड़ सकते हैं और तरह addEventListener

+0

बस मेरे दिन बचाया एक समारोह के साथ बाध्य करने के लिए है! –