2008-09-17 8 views
6

मान लीजिए कि मैं एक वेब पेज चाहता हूं जिसमें एक फ्लैश ऐपलेट है और मैं कुछ ऑब्जेक्ट्स को वेब पेज से या नीचे खींचना चाहता हूं, क्या यह संभव है?क्या जावास्क्रिप्ट के साथ फ्लैश एप्लेट के बाहर/बाहर खींचना और ड्रॉप करना संभव है?

बोनस अगर आप कहीं ऐसी वेबसाइट जानते हैं जो ऐसा करता है!

उत्तर

12

यह भी मुझे intrigued है। मुझे पता है कि जेसेगेविन ने कुछ कोड पोस्ट किया था, जबकि मैं इसे समझने के लिए गया था, लेकिन इसका परीक्षण किया गया है। मेरे पास एक सुपर-सरल कामकाजी उदाहरण है जो आपको फ्लैश से और खींचने देता है। यह बहुत गन्दा है क्योंकि मैंने इसे दोपहर के भोजन के दौरान एक साथ फेंक दिया।

यहाँ demo

और source

आधार वर्ग External Interface LiveDocs से सीधे लिया जाता है है। मैंने माईबटन को जोड़ा ताकि बटन में कुछ टेक्स्ट हो। जावास्क्रिप्ट का अधिकांश हिस्सा उसी लाइवडॉक्स उदाहरण से आता है।

मैंने इसे mxmlc का उपयोग करके संकलित किया।

+0

बहुत धन्यवाद, मुझे लगता है कि अन्य उत्तरों गलत साबित करते हैं कि यह संभव नहीं है! – BoD

+0

enobrev जाने के लिए रास्ता! यह वास्तव में चालाक है। – jessegavin

+0

धन्यवाद श्रीमान। यह थोड़ा छोटी है, लेकिन अवधारणा का सबूत कम नहीं है। – enobrev

0

यदि पूरी साइट एक बड़ी एम्बेडेड फ़्लैश फ़ाइल है तो हाँ यह संभव है।

मुझे नहीं लगता है कि आप इसे किसी अन्य तरीके से

प्राप्त कर सकते हैं
1

मैं इसे पता लगाने के लिए यदि आप है कि आइटम है कि फ्लैश सामान शामिल हैं पर खींची है फ्लैश करने के लिए ड्रॉप करने के लिए संभव है कह सकते हैं कि, और आप फ्लैश से ज़ेड-इंडेक्स उच्च होने के लिए अपनी खींची गई वस्तुओं को सेट करते हैं। फिर जब इसे गिरा दिया जाता है तो आप जावास्क्रिप्ट का उपयोग करके फ्लैश से बात कर सकते हैं कि यह कहां और क्या गिराया गया था।

हालांकि दूसरी तरह के आसपास शायद बहुत कठिन है, क्योंकि आप जब वस्तु फ़्लैश फिल्म की सीमा हिट पता लगाने के लिए जावास्क्रिप्ट हैंडलर के लिए यह ("पारित" html में इसे बनाने होगा और, में इसे छिपाने फ्लैश)।

सवाल शायद यह जानना है कि क्या यह परेशानी का लायक है, या यदि आप जेएस या फ्लैश में सब कुछ हासिल कर सकते हैं?

+0

तो मुझे लगता है कि उत्तर है: यह संभव हो सकता है लेकिन मानक तरीके से ऐसा करने के लिए कोई ज्ञात एपीआई या अन्य सुविधा नहीं है – BoD

0

फ़्लैश में संभव नहीं है - जब तक कि आप एक ही फ़्लैश एप्लिकेशन के अंदर किसी लक्ष्य को खींचना नहीं चाहते हैं।

शायद एक हस्ताक्षरित जावा एप्लेट के साथ किया जा सकता है (लेकिन जो कि सड़क के नीचे जाना चाहता है?)

1

पर, कैप्सूलीकरण बिंदु एक वैध एक लेकिन फ़्लैश जे एस कार्यों को निष्पादित कर सकते हैं, और Seldaek सही है रुको कि एक उच्च जेड-इंडेक्स वाले एचटीएमएल तत्व को फ्लैश मूवी पर तैरना चाहिए। तो यदि आपने जेएस में सभी ड्रैग हैंडलिंग किए हैं और फ्लैश ने अपने स्वयं के आयामों को पढ़ा है और ऐप में पॉइंटर की स्थिति है तो यह जेएस विधियों को संकेत दे सकता है कि दास तत्व पॉइंटर को भी (विशेष रूप से) जब पॉइंटर छोड़ देता है फ्लैश ऐप की सीमाएं। हालांकि यह बहुत बालों वाली होगी।

3

अस्वीकरण मैंने इस कोड का बिल्कुल परीक्षण नहीं किया है, लेकिन विचार काम करना चाहिए। इसके अलावा, यह केवल से एक फ्लैश मूवी खींचने को संभालता है।

यहां कुछ एक्शनस्क्रिप्ट 3.0 कोड है जो ExternalInterface कक्षा का उपयोग करता है।

import flash.display.Sprite; 
import flash.external.ExternalInterface; 
import flash.net.URLLoader; 
import flash.net.URLRequest; 

if (ExternalInterface.available) { 
    ExternalInterface.addCallback("handleDroppedImage", myDroppedImageHandler); 
} 

private function myDroppedImageHandler(url:String, x:Number, y:Number):void { 

    var container:Sprite = new Sprite(); 
    container.x = x; 
    container.y = y; 
    addChild(container); 

    var loader:Loader = new Loader(); 
    var request:URLRequest = new URLRequest(url); 
    loader.load(request); 

    container.addChild(loader); 
} 

यहाँ HTML/jQuery कोड

<html> 
<head> 
    <title>XHTML 1.0 Transitional Template</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.5.2/jquery-ui.min.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     $("#dragIcon").draggable(); 

     $("#flash").droppable({ 
     tolerance : "intersect", 
     drop: function(e,ui) { 

      // Get the X,Y coords relative to to the flash movie 
      var x = $(this).offset().left - ui.draggable.offset().left; 
      var y = $(this).offset().top - ui.draggable.offset().top; 

      // Get the url of the dragged image 
      var url = ui.draggable.attr("src"); 

      // Get access to the swf 
      var swf = ($.browser.msie) ? document["MyFlashMovie"] : window["MyFlashMovie"]; 

      // Call the ExternalInterface function 
      swf.handleDroppedImage(url, x, y); 

      // remove the swf from the javascript DOM 
      ui.draggable.remove(); 
     } 
     }); 
    }); 
    </script> 
</head> 
<body> 

    <img id="dragIcon" width="16" height="16" alt="drag me" /> 

    <div id="flash"> 
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
     id="MyFlashMovie" width="500" height="375" 
     codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"> 
     <param name="movie" value="MyFlashMovie.swf" /> 
     <param name="quality" value="high" /> 
     <param name="bgcolor" value="#869ca7" /> 
     <param name="allowScriptAccess" value="sameDomain" /> 
     <embed src="MyFlashMovie.swf" quality="high" bgcolor="#869ca7" 
     width="500" height="375" name="MyFlashMovie" align="middle" 
     play="true" loop="false" quality="high" allowScriptAccess="sameDomain" 
     type="application/x-shockwave-flash" 
     pluginspage="http://www.macromedia.com/go/getflashplayer"> 
     </embed> 
    </object> 
    </div> 

</body> 
</html>