2011-05-06 18 views
7

पहला सवाल रोक, इसलिए हो तरह :)jQuery खींचने योग्य वापस लाएं और घटना

मुझे क्या करना कोशिश कर रहा हूँ एक समारोह है जब उपयोगकर्ता खींचने योग्य विज्ञप्ति फोन है, और वापस लाएं एनीमेशन पूरा कर लिया है पहले।

जहाँ तक मैं देख सकता हूं, स्टॉप इवेंट केवल तभी समाप्त होता है जब रिवर्ट समाप्त हो जाता है। मैंने ड्रैगगेबल के रिवर्ट विकल्प में फ़ंक्शन पास करने का प्रयास किया है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। प्रदर्शन करने के लिए मेरा कोड थोड़ा सा है;

$("a").draggable({ 
    helper:function(){ 
     return $("<div/>",{id:"mydrag",text:"link"}).appendTo("body"); 
    }, 
    revert:function(evt,ui){ 
     // $("#mydrag").fadeOut("slow"); 
     return true; 
    }, 
    stop:function(evt,ui){ 
     console.log("fin"); 
    } 
}); 

अगर मैं रिवर्ट फ़ंक्शन की पहली पंक्ति को असम्बद्ध करता हूं - fadeout - तो तत्व बाहर निकलता है लेकिन वापस नहीं आता है। कन्वर्ट एनीमेशन पूरा होने पर कंसोल केवल "फिन" लॉग करता है।

क्या कोई मेरी मदद कर सकता है? कहने की जरूरत नहीं है कि मैंने जवाब के लिए बहुत कुछ किया है, लेकिन बिना किसी किस्मत के।

बस्टर

उत्तर

11

पहले, this blog के अनुसार, गैर-दस्तावेजी revert कॉलबैक केवल एक ही तर्क (ड्रॉप सॉकेट वस्तु, या बूलियन false अगर बूंद को अस्वीकार कर दिया गया था) ले जाता है।

अब समस्या यह है कि draggable आंतरिक रूप से सहायक को स्थानांतरित करने के लिए animate() का उपयोग करता है। जाहिर है, वह एनीमेशन कतारबद्ध हो जाता है और केवल fadeOut प्रभाव समाप्त होने के बाद ही शुरू होता है।

एक तरह से प्राप्त करने के लिए आप क्या चाहते हैं कॉल अपने आप को, इस तरह animate() को प्रदर्शन करने के लिए है:

revert: function(socketObj) { 
    if (socketObj === false) { 
     // Drop was rejected, revert the helper. 
     var $helper = $("#mydrag"); 
     $helper.fadeOut("slow").animate($helper.originalPosition); 
     return true; 
    } else { 
     // Drop was accepted, don't revert. 
     return false; 
    } 
} 

खींचने योग्य सहायक बाहर फीका करने के लिए, जबकि यह पूर्ववत कर किया जा रहा है की अनुमति देता है कि।

आप उस समाधान का परीक्षण कर सकते हैं here

+0

धन्यवाद, यह बहुत उपयोगी है। मुझे आश्चर्य है कि रिवर्ट कॉलबैक क्यों अनियंत्रित है? वास्तव में, मुझे आश्चर्य है कि jquery कोर की तुलना में सामान्य रूप से jquery UI दस्तावेज़ इतना खराब क्यों है। एक बार फिर धन्यवाद! – BusterLuke

+1

आपको सही रास्ते पर, लेकिन मूल स्थिति को कॉल करना सचमुच कुछ भी नहीं देता है, यहां तक ​​कि आपके jsfiddle के साथ भी। यह सुनिश्चित नहीं है कि आपको यह हिस्सा कहां मिला क्योंकि कॉलम (अपरिभाषित) अनिवार्य रूप से कुछ भी नहीं करता है। रिवर्ट एनीमेशन वास्तव में अभी भी आपके कॉलबैक फ़ंक्शन के भीतर से सही लौटने का परिणाम है। तो मूल रूप से, आपका कोड क्या कर रहा है, बस एनीमेशन के 'क्यूइंग' को छोड़कर, इसे आपके कॉलबैक फ़ंक्शन में डालने के लिए जो भी अन्य एनीमेशन चुनने के साथ-साथ सत्य लौटने के साथ-साथ चलाने की इजाजत देता है। निष्कर्ष: इस .animate ($ helper.originalPosition) को हटा दें; – mkralla11

+0

@ माइक, आप बिल्कुल सही हैं, 'वापसी' घटना के दौरान '$ helper.originalPosition' वास्तव में' अपरिभाषित 'है। हालांकि, आइटम को 'एनीमेट (अपरिभाषित)' परिणामों में हटाकर आइटम को वापस नहीं किया जा रहा है और "जगह में" बाहर निकल रहा है। यहां निश्चित रूप से कुछ छायादार है ... –

संबंधित मुद्दे