是否可以使用JavaScript从Flash applet拖放到外部?

时间:2008-09-17 12:22:02

标签: javascript flash drag-and-drop

假设我想要一个包含Flash小程序的网页,我想将一些对象拖放到网页的其他部分或者放到网页的其他部分,这是不是很有可能?

如果您知道某个网站可以做到这一点,那就获得奖励!

6 个答案:

答案 0 :(得分:12)

这个引起了我的兴趣。我知道jessegavin发布了一些代码,而我去了解这个问题,但这个代码已经过测试。我有一个超级简单的工作示例,可让您拖动闪存。我在午休期间将它扔在一起时,它非常混乱。

这是demo

source

基类直接来自External Interface LiveDocs。我添加了MyButton,所以按钮可以有一些文字。大多数javascript都来自同一个LiveDocs示例。

我使用mxmlc编译了这个。

答案 1 :(得分: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>

答案 2 :(得分:1)

我想如果您检测到项目被拖动到包含Flash内容的项目,并且您将拖动的对象设置为更高的z-index,则可以将拖放到 Flash比闪光灯。然后当它被删除时,你可以使用javascript与Flash交谈,告诉它在哪里和什么被删除。

然而另一种方式可能更难,因为你必须检测对象何时到达flash电影的边框并将其“传递”到javascript处理程序(在html中创建它,将其隐藏在flash中)。

问题可能是要知道它是否值得麻烦,或者你是否可以在JS或Flash中实现一切?

答案 3 :(得分:1)

坚持,封装点是有效的,但是flash可以执行JS函数,而Seldaek是正确的,具有更高z-index的HTML元素应该浮动在flash影片上。因此,如果你在JS中进行了所有的拖动处理,并且闪存读取了自己的维度和指针在应用程序中的位置,那么当指针离开时,它可以向JS方法发信号通知指针甚至(特别是)指针。 Flash应用程序的边界。但它会很毛茸茸。

答案 4 :(得分:0)

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

我认为你不能以任何其他方式实现它

答案 5 :(得分:0)

闪存中不可用 - 除非您想要拖动到同一个Flash应用程序内的目标。

可能可以使用已签名的Java小程序(但是谁想要走这条路?)