6

假设我想要一个包含 Flash 小程序的网页,并且我想从网页的其余部分拖放一些对象,这可能吗?

如果您知道某个网站可以做到这一点,那就太好了!

4

6 回答 6

12

This one intrigued me. I know jessegavin posted some code while I went to figure this out, but this one is tested. I have a super-simple working example that lets you drag to and from flash. It's pretty messy as I threw it together during my lunch break.

Here's the demo

And the source

The base class is taken directly from the External Interface LiveDocs. I added MyButton so the button could have some text. The majority of the javascript comes from the same LiveDocs example.

I compiled this using mxmlc.

于 2008-09-17T17:19:27.330 回答
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>
于 2008-09-17T15:50:37.420 回答
1

我会说如果您检测到该项目被拖到包含 Flash 内容的项目上,并且您将拖动的对象设置为具有高于 Flash 的 z-index,则可以拖放到 Flash 然后,当它被丢弃时,您可以使用 javascript 与 Flash 交谈,告诉它丢弃的位置和内容。

然而,相反的方法可能更难,因为您必须检测对象何时触及 Flash 电影的边框并将其“传递”给 javascript 处理程序(在 html 中创建它,将其隐藏在 Flash 中)。

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

于 2008-09-17T12:30:52.720 回答
1

等等,封装点是有效的,但是 flash 可以执行 JS 函数,Seldaek 是正确的,具有更高 z-index 的 HTML 元素应该浮动在 flash 电影上。因此,如果您在 JS 中完成所有拖动处理并让 flash 读取其自身的尺寸和指针在应用程序中的位置,它可以向 JS 方法发出信号,即使(尤其是)当指针离开Flash 应用程序的边界。不过它会很毛茸茸。

于 2008-09-17T13:10:51.720 回答
0

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

我不认为你可以通过任何其他方式实现它

于 2008-09-17T12:23:46.980 回答
0

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

可能可以用一个签名的 Java 小程序来完成(但谁愿意走那条路呢?)

于 2008-09-17T12:32:19.737 回答