2008-09-17 56 views

回答

12

这一次吸引了我。我知道jessegavin发布了一些代码,而我去了解这一点,但是这个测试。我有一个超级简单的工作示例,可以让您拖放到Flash中。在午休期间,我把它扔在一起,非常混乱。

这里的demo

而且source

的基类是直接取自External Interface LiveDocs。我添加了MyButton,以便按钮可以有一些文本。大部分的JavaScript来自相同的LiveDocs示例。

我编译这个使用mxmlc。

+0

非常感谢,我想这证明错了其他答案说这是不可能的! – BoD 2008-09-18 08:12:08

0

如果整个网站是一个大的嵌入式Flash文件,那么是的,这是可能的。

我不认为你可以acheive任何其他方式

1

我会说这是能够丢弃闪存,如果你发现该项目一拖再拖到包含闪光的东西,并且您将拖动的对象设置为z-index高于flash。然后,当它被丢弃时,您可以使用JavaScript与Flash交谈,告诉它在哪里以及什么被丢弃。

然而,其他方式可能更难,因为你必须检测什么时候该对象击中Flash电影的边界,并将其“传递”到JavaScript处理程序(在HTML中创建它,将其隐藏闪)。

这个问题可能是知道它是否值得麻烦,或者如果你可以在JS或Flash中实现所有功能?

+0

所以我想答案是:这可能是可能的,但没有已知的API或其他设施以标准的方式做到这一点 – BoD 2008-09-17 15:42:55

0

不可能在闪光 - 除非你想拖动到相同的Flash应用程序内的目标。

很可能有签名的Java小程序来完成(但谁愿意走这条道路?)

1

坑上,封装点是一个有效的,但闪光灯可以执行JS的功能,Seldaek是正确的具有较高z-index的HTML元素应该浮动在Flash影片上。所以如果你在JS中做了所有的拖拽处理,并且让flash读取了它自己的尺寸和指针在应用中的位置,它可以发信号通知JS方法,从而使元素(甚至) Flash应用程序的边界。这将是非常毛茸茸的。

3

免责声明我还没有测试过这个代码,但这个想法应该可行。此外,这只处理拖动一个Flash电影。

这是一些使用ExternalInterface类的ActionScript 3.0代码。

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> 
相关问题